89

いくつかの明白なオプションを試しましたが、どれも機能しません:

In [150]: x
Out[150]: datetime.date(2012, 9, 1)

In [151]: type(x)
Out[151]: datetime.date

In [152]: isinstance(x, datetime.date)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-152-9a298ea6fce5> in <module>()
----> 1 isinstance(x, datetime.date)

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

In [153]: x is datetime.date
Out[153]: False

In [154]: type(x) is datetime.date
Out[154]: False

これを行う正しい方法は何ですか?

4

8 に答える 8

140

あなたの例で機能しない理由は、次のようにインポートしたためだと思いますdatetime

from datetime import datetime

これにより、表示されるエラーが発生します

In [30]: isinstance(x, datetime.date)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/<ipython-input-30-9a298ea6fce5> in <module>()
----> 1 isinstance(x, datetime.date)

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

単純に次のようにインポートする場合:

import datetime

コードは他のすべての回答に示されているように実行されます

In [31]: import datetime

In [32]: isinstance(x, datetime.date)
Out[32]: True

In [33]: 
于 2013-04-22T16:06:15.213 に答える
17

正しい方法は

import datetime
isinstance(x, datetime.date)

私のマシンでこれを試してみると、うまくいきます。datetime.dateがクラスではない理由を調べる必要があります。もしかして何か他のもので隠していませんか?またはインポートのために正しく参照していませんか?

于 2013-04-22T15:58:48.623 に答える
14
import datetime
d = datetime.date(2012, 9, 1)
print type(d) is datetime.date

> True
于 2013-04-22T15:59:34.373 に答える
6

既存のコードが既に に依存しているfrom datetime import datetime場合は、単にインポートすることもできますdate

from datetime import datetime, timedelta, date
print isinstance(datetime.today().date(), date)
于 2015-12-01T19:21:32.290 に答える
3

Python 3.5では、私にはisinstance(x, date)うまくいきます:

>>> from datetime import date
>>> x = date(2012, 9, 1)
>>> type(x)
<class 'datetime.date'>
>>> isinstance(x, date)
True
>>> type(x) is date
True
于 2016-05-05T06:43:20.067 に答える