Я экспериментирую с декораторами Python, чтобы понять, что происходит, и я столкнулся с проблемой.
Мой код таков (python 2.7.6):
import traceback
def dec(func):
def wrapped(*args, **kwargs):
try:
if flag:
print 'flagged'
else:
print 'unflagged'
except NameError as e:
print 'error?'
raise
finally:
return func(*args, **kwargs)
return wrapped
@dec
def foo(x):
print x
foo(3)
при запуске вывод:
error?
3
Я ожидал, что вызов foo(3) вызовет:
NameError: global name 'flag' is not defined
Почему "рейз" не повышается? Ясно, ошибка поймана - выполняется печать из блока Except...