Проверьте, является ли переменная, которая может быть или продолжительностью или timedelta, больше чем 0? - PullRequest
0 голосов
/ 12 сентября 2018

Я использую isodate для анализа продолжительности в изоформате по датам:

>>> 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    

Что является хорошим решением для этого?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы должны определить функцию, которая применяет соответствующий метод для каждого типа:

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)
0 голосов
/ 12 сентября 2018

Проверьте, является ли экземпляр переменной 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
...