>>> raise ValueError("wrong value")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: wrong value
>>> try:
... raise ValueError("wrong value")
... except:
... raise sys.exc_info()
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError
If you want to really re-raise the exact same message, replace sys.exc_info()[0] with the exception instance.
>>> try:
... raise ValueError("wrong value")
... except Exception as e:
... raise (e,) + sys.exc_info()[1:]
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: wrong value
Alas, replacing the traceback object (sys.exc_info()[2]) does not seem to work:
>>> try:
... json.loads('NOT JSON')
... except:
... _, _, tb = sys.exc_info()
...
>>> try:
... 1 / 0
... except Exception as e:
... raise sys.exc_info()[:2], tb
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ZeroDivisionError: <traceback object at 0x02B752B0>
Why not simply,
ReplyDeletetry:
raise ValueError("wrong value")
except Exception as e:
raise
What you are describing is a useful feature of Python. This blog is focused on pointless and destructive applications of Python semantics. In particular, we are raising the same exception but destroying / manipulating the stack trace so it appears to obfuscate the origin. :-)
DeleteNhững Chuyến Đi Cuộc Đời
ReplyDeleteNgẫu Hứng Du Lịch
Tri Thuc Du Lich
Book Ve Du Lich Gia Re
Notice the latest markdown codes and updates at stable boots to help you with getting a fair methodology on your totally favored importance care things and get-together things.
ReplyDelete