2015-07-21 2 views
0

Это в Python, но может применяться к любому языку.Можно ли положить код, подверженный ошибкам, в инструкцию OR?

a = None 
if (not a) or (a+3==5): 
    print("Is this okay?") 

Это хорошая практика программирования иметь a+3 в заявлении, если, несмотря на то, что это вызовет ошибку, если a является None?

Я полагаюсь на or остановиться перед ошибкой, которая, кажется, как плохая идея для меня в случае a на самом деле что-то другое, что не поддерживает добавление или or заявление (в каком-то другом языке) выглядит при обоих значениях.

Что было бы лучшим способом запрограммировать это?

+0

Я хотел бы отметить, что 'if key в словаре и словаре [key]' является довольно распространенным шаблоном. – NightShadeQueen

+0

В вашем примере не будет ошибки, так как не None is True, поэтому условие if немедленно продолжилось, как только оно обнаружило 1 истинное условие, так как это инструкция или. –

+0

Я не знаю, для чего вы его используете, но 'if hasattr (a, '__ add __') ....' может быть то, что вы хотите? – NightShadeQueen

ответ

1

Да, вы можете зависеть от короткого замыкания для выполнения обработки ошибок и проверки.

Однако в вашем случае, ваша логика не так, вам нужно будет and для выполнения этой обработки ошибок

if a and (a+3==5): 

В качестве альтернативы вы можете даже сделать проверку типа

if isinstance(a, int) and (a+3==5): 

Опять же это будет короткое замыкание перед чтением операции +

+0

Это приведет к неправильным результатам, если' a' был '0'. Я думаю, вам может понадобиться явный 'if a! = None'. – TigerhawkT3

+0

Моя логика отлично работает ('не' возвращает 'True', поэтому короткие или короткие замыкания '), но ваша быстрее и легче читать. –