Безопасно ли ссылаться на возможно несуществующую переменную после проверки в операторе if? - PullRequest
1 голос
/ 27 февраля 2011

Скажем, у меня есть класс myObject с членом с именем prop.У меня есть переменная var, которая может быть, а может и не быть myObject.Я хочу проверить, поддерживает ли prop определенное значение, и если да, сделать что-то, и если нет, или var не является myObject, не указывайте.

Было бы безопасно сделать следующее:

if isinstance(var, myObject) and var.prop == 10:
    #Do something

В принципе, гарантируется ли, что вторая часть этого оператора if не будет проверена, если первая часть оценивается как False?Если этот флажок установлен, даже если var не является myObject, будет выдано сообщение об ошибке.

1 Ответ

5 голосов
/ 27 февраля 2011

Чтобы ответить на ваш вопрос, да, and короткое замыкание. Но я бы так не поступил .Лучшим способом является использование hasattr или try, except блока.

if hasattr(var, 'prop') and var.prop == 10:
    print var.prop

Или (если это непривычно для пропелла):

...