Я столкнулся с интересным явлением в Python 3.6. Если я возвращаю self
в методе __exit__
класса, кажется, что любое исключение, возникшее в блоке with
, который использует указанный класс, просто исчезает. Я не знаю, почему это происходит, и это не кажется желательным поведением. С помощью следующего кода я могу воспроизвести это:
class SomeObject(object):
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
return self
if __name__ == '__main__':
with SomeObject():
print('This print statement works')
raise Exception('This exception is not raised for some reason')
print('This statement is printed as if nothing happened')
Это приводит меня к следующим вопросам:
- Можете ли вы воспроизвести это или это только я?
- Предполагается, что исключение исчезнет (т.е. есть ли на то веская причина)? И если да, то почему?