Почему оператор обрабатывается как False?

#python #if-statement

#python #if-statement

Вопрос:

Я довольно новичок в Python, так что, возможно, это очень глупый вопрос, но я не могу найти ошибку.

У меня есть следующий код, который запускается при запуске скрипта (на Raspberry Zero W). convertTimeToArray() Функция всегда возвращает массив, но не всегда заполненный массив. Это правильно. Итак, мне нужна проверка, заполнен ли этот массив, и если да, то этот массив необходимо обработать (в данном случае показать на светодиодной полосе).

 try:
    while True:
        array = convertTimeToArray(strip)
        print('len(array)', len(array))
        print('array and len(array) > 0', array and len(array) > 0)
        if array and len(array) > 0 is True:
            showArray(strip, CLOCK_COLOR,array, EFFECT)
            print('array set, now waiting 50 seconds')
            time.sleep(50)
        else:
            print('wait another 5 seconds')
            time.sleep(5)

except KeyboardInterrupt:
    colorWipe(strip, Color(0, 0, 0), 1)
  

Но код всегда перенаправляется на else этого блока, даже если операторы имеют значение true (в консоли):

 len(array) 20
array and len(array) > 0 True
wait another 5 seconds
  

Что я здесь делаю не так? Я дважды проверил вкладки, и я почти уверен, что они верны.

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

1. Вы можете отбросить is True , чтобы просто иметь if array and len(array) > 0

2. Вы создали цепное сравнение , которое на самом деле len(array) > 0 and 0 is True . Эмпирические правила: 1) никогда явно не проверяйте True , это излишне и подвержено ошибкам. 2) Вы почти всегда хотите == вместо is , за исключением очень специфических ситуаций.

3. Это Python, поэтому, вероятно, было бы менее запутанно вызывать array что-то вроде time_list . Если вы хотите придерживаться, is True то повторите как (array and len(array) > 0) is True .

4. Спасибо! Изменение оператора (удаление is True было трюком! Если кто-то может указать это в качестве ответа здесь, я могу пометить это как решение.

5. @CoryKramer: if array and len(array) > 0 является избыточным из-за правил правдивости Python для контейнеров, поэтому его можно сократить до того if array , который делает то же самое быстрее с меньшим количеством кода.