Нет ошибки 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,

Другие вопросы по тегам