我正在使用isodate将isoformat的持续时间解析为日期:
>>> isodate.parse_duration("P1M")
isodate.duration.Duration(0, 0, 0, years=0, months=1)
>>> isodate.parse_duration("P1D")
datetime.timedelta(1)
将月解析为duration
个对象,将天解析为timedelta
个对象,如文档中所述:https://pypi.org/project/isodate/
我想测试可以为duration
类型或timedelta
类型的变量的值是否大于0。适用于duration
类型的方法没有适用于timedelta
类型,反之亦然。
>>> isodate.parse_duration("P1M") > 0
True
>>> isodate.parse_duration("P1D") > 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.timedelta to int
>>> isodate.parse_duration("P1M") > timedelta.min
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.timedelta to Duration
>>> isodate.parse_duration("P1D") > timedelta.min
True
对此有什么好的解决方案?
答案 0 :(得分:0)
检查变量实例是datetime.timedalta还是Duration:
def is_larger_than_0(duration):
if isinstance(duration, datetime.timedelta):
if duration > datetime.timedelta.min:
return True
elif isinstance(duration, Duration):
if duration > 0:
return True
return False
答案 1 :(得分:0)
您应该定义一个函数,然后对每种类型应用适当的方法:
def is_greater_than_zero(duration):
if type(duration) is isodate.duration.Duration:
return duration > 0
elif type(duration) = 'datetime.timedelta':
return duration > timedelta.min
is_greater_than_zero(duration)