【问题标题】:Check if a variable that can be either duration or timedelta is larger than 0?检查一个可以是持续时间或时间增量的变量是否大于 0?
【发布时间】:2018-09-12 08:05:12
【问题描述】:

我正在使用 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    

有什么好的解决办法?

【问题讨论】:

    标签: python isodate


    【解决方案1】:

    检查变量实例是 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
    

    【讨论】:

      【解决方案2】:

      您应该定义一个函数,然后为每种类型应用适当的方法:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 2016-09-30
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        相关资源
        最近更新 更多