Нет ошибки TypeError, сравнивающей int с None в Python3
Я понимаю, что сравнение типов int и None недопустимо в Python3 (3.6.1), как я вижу здесь:
>>> largest = None
>>> number = 5
>>> number > largest
TypeError: '>' not supported between instances of int and NoneType
Но внутри этого скрипта он не дает ошибку TypeError.
largest = None
for number in [5, 20, 11]:
if largest is None or number > largest:
largest = number
Когда я запускаю этот скрипт с python3, он работает без TypeError. Зачем?
2 ответа
Решение
Ты наблюдаешь short circuiting
,
if largest is None or number > largest:
(1) or (2)
Когда состояние (1)
оценивается как истинное условие (2)
не выполняется. На первой итерации largest is None
является True
, так что все выражение верно.
В качестве иллюстративного примера рассмотрим этот небольшой фрагмент.
test = 1
if test or not print('Nope!'):
pass
# Nothing printed
Теперь повторите с test=None
:
test = None
if test or not print('Nope!'):
pass
Nope!
Если вы внимательно изучите свой код, вы заметите, что вы инициализируете None
, а затем условно спросить, если это None
таким образом, оператор if оценивается как True
,