Сравнение Datetime и неупорядочиваемых типов

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь сравнить datetimes из разных источников (поэтому форматы немного отличаются). По сути, я проверяю, не прошло ли время для затемнения панели отображения, просматривая текущие значения в словаре, который обновляется ежедневно.

Я выяснил, как свести формат ISO только к элементу time ( _ss ниже), но изо всех сил пытаюсь получить правильное Datetime.datetime значение ( _herenow ниже):

Форматы:

 _ss       05:50:06
_herenow  08:35:21.992656
  

Мой код:

 def is_day_time():
    _now = datetime.datetime.now()
    _ss = local_weather.get('mylocal_ss')
    _sr = local_weather.get('mylocal_sr')
    _ss = _ss.time()
    _sr = _sr.time()
    _herenow = _now.time()
    if _herenow >= _ss or _now <= _sr:
        _isnight = 1
        mymatrix.DisplayBright(_isnight)
    else:
        _isnight = 0
        mymatrix.DisplayBright(_isnight)
  

Ошибка, которую я получаю:

 if _herenow >= _ss or _now <= _sr:
TypeError: unorderable types: datetime.datetime() <= datetime.time()
  

Любая помощь была бы очень признательна.

Ответ №1:

Вы хотите использовать только _herenow , поскольку это time .

Кроме того, вы можете упростить условный:

 _isnight = (_herenow <= _sr or _herenow >= _ss)
mymatrix.DisplayBright(_isnight)
  

В качестве отступа: нет ничего плохого в том, чтобы добавлять к именам переменных символы подчеркивания, но это странно.

Комментарии:

1. Насколько мне известно, добавление переменных с подчеркиванием означает, что вы не хотите, чтобы к ним прикасались

2. @alec_a Поскольку они находятся в функции, неясно, кто будет их трогать или как в любом случае…

3. @alec_a Да, в области видимости класса. Однако это область действия функции, поэтому эти переменные все равно нельзя трогать.

4. Нет, неправильно, я принял or оператор за and . В конце концов, это не эквивалентно.

5. @deceze Я думаю, что в целом это лучше.