Вы можете избежать использования session.var
, если он не существует, сначала проверив его, используя hasattr
.Это исключает необходимость в блоке try
/ except
все вместе.
if hasattr(session, 'var') and session.var is not None:
...
else:
...
Альтернативой может быть else
в вашем исходном коде, просто raise
исключение, чтобы добраться доexcept
блок, но это некрасиво:
try:
if session.var:
...
else:
raise AttributeError
except AttributeError:
...
В этой ситуации я думаю, что стиль программирования «Look Before you Leap» (с использованием hasattr
) более приятен, чем обычно более Pythonic стиль«Проще просить прощения, чем разрешения» (который использует исключения как часть управления потоком).Но любой из них может работать.
Если бы ваш код был разделен на более мелкие функции, возможно, было бы еще проще справиться с этой проблемой.Например, если вы написали функцию get_session_var
, она могла бы return
из успешного случая (внутри блоков try
и if
), и два случая ошибок могут быть устранены позже:
def get_session_var(session):
try:
if session.var:
return session.var
except AttributeError:
pass
util = db.utility[1]
session.var = util.freshOutTheBank
return session.var