#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
, который делает то же самое быстрее с меньшим количеством кода.