Python проверка условий и безопасности в той же инструкции if - PullRequest
0 голосов
/ 29 мая 2020

Я написал код python, в котором у меня есть условие, если объект - None return if it not get object property and check it. Вот пример кода:

b = None
if b is None or b.property == "something":
    print("yay")

при запуске код выше печатает AttributeError: 'NoneType' object has no attribute 'property' код ниже печатает тот же результат.

b = None
if b.property == "something" or b is None:
    print("yay")

Вопрос: Предположим, в предложении if есть много or проверок после того, как одна из них оценивается как истинная, другие условия могут быть пропущены, потому что результат будет правдой, поэтому его трата #compute power. То же самое можно применить и к оператору and, если какое-либо условие равно 0, результат равен нулю. Итак, почему в приведенном выше примере выдается exception?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я писал свой вопрос, чем меня осенило. В любом случае я оставлю и решение своей проблемы.

if (b is None) or b.property == "something":
    print("yay")

There is a natural order to this world! =)

0 голосов
/ 29 мая 2020

Мне не удалось воспроизвести ошибку.

>>> b = None
>>> b is None or b.property == 'something'
True

Однако вам может быть интересно узнать, что ключевое слово or не обязательно возвращает True или False; скорее, учитывая выражение a or b, оно возвращает a, если a истинно, иначе оно возвращает b, независимо от его логического значения. Мы получили бы описанную вами ошибку, если бы порядок операций был другим:

>>> b is (None or b.property) == 'something'
AttributeError: 'NoneType' object has no attribute 'property'
...