Днес в края на лекцията (или малко след това) зададохме следния въпрос (за една бира):
Каква е разликата между rethrow1
и rethrow2
:
# извинявам се за грозното форматиране; пестя място
def f():
raise Exception
def rethrow1():
try: f()
except: raise
def rethrow2():
try: f()
except Exception as ex: raise ex
Получихме отговора: второто създава нова инстанция, а първото хвърля същата...
... и не дадохме бирата, а само Сникърс.
Истината е друга, но ефектът е близък. Не се създава нова инстанция в никой от случаите, но във втория stack-trace-а на изключението се подменя с нов.