我应该如何检查给定的参数是否是datetime.date对象?

rmh*_*rmh 16 python datetime

我目前正在使用assert声明isinstance.因为datetime是子类date,我还需要检查它不是一个实例datetime.当然有更好的方法吗?

from datetime import date, datetime

def some_func(arg):
    assert isinstance(arg, date) and not isinstance(arg, datetime),\
        'arg must be a datetime.date object'
    # ...
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 32

我不理解你拒绝子类实例的动机(根据定义,它们支持超类支持的所有行为!),但如果你真的坚持这样做,那么:

if type(arg) is not datetime.date:
    raise TypeError('arg must be a datetime.date, not a %s' % type(arg))
Run Code Online (Sandbox Code Playgroud)

assert除了开发过程中的健全性检查之外不要使用它(当你运行时它会转为无操作python -o),并且不要引发错误的异常(例如,AssertionError当a TypeError显然是你的意思时).

使用isinstance然后排除一个特定的子类不是一种合理的方法来获得一个严格指定的精确类型,并且排除了子类:毕竟,用户可能完全是子类datetime.date并添加它是你必须通过拒绝datetime.datetime具体的实例来避免的! - )


Joh*_*hin 5

如果您的问题是图表因为使用了一天中的一小部分而变得不稳定,您可以通过其他方式对其进行测试,例如hasattr(arg, 'hour')区分datetime实例和date实例.