import sys, traceback
try:
1/0
except Exception as e:
print(e)
print(type(e))
print(e.args)
print(vars(sys.exc_info()[0]))
print(vars(sys.exc_info()[1]))
print(sys.exc_info())
print(type(sys.exc_info()[1]), sys.exc_info()[1])
division by zero <class 'ZeroDivisionError'> ('division by zero',) {'__init__': <slot wrapper '__init__' of 'ZeroDivisionError' objects>, '__new__': <built-in method __new__ of type object at 0x55be2f196ce0>, '__doc__': 'Second argument to a division or modulo operation was zero.'} {} (<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x7faa0443a0c8>) <class 'ZeroDivisionError'> division by zero
import sys
sys.exc_info()
(None, None, None)
import sys
try:
a
except ZeroDivisionError:
print('--> ZeroDivisionError!')
except as e:
print("--> except: ", )
raise
else:
print('--> no except!')
finally:
print('--> always!')
--> except: (<class 'NameError'>, NameError("name 'a' is not defined",)) --> always!
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-7-4ff509892040> in <module>() 1 import sys 2 try: ----> 3 a 4 except ZeroDivisionError: 5 print('--> ZeroDivisionError!') NameError: name 'a' is not defined
https://docs.python.org/3/library/traceback.html
traceback.print_tb(tb, limit=None, file=None) traceback.print_exception(etype, value, tb, limit=None, file=None, chain=True) traceback.print_exc(limit=None, file=None, chain=True)
import sys, traceback
def main():
my_exc()
def my_exc():
return 1/0
try:
main()
except Exception:
exc_type, exc_value, exc_traceback = sys.exc_info()
print("*** print_tb: (too simple)")
traceback.print_tb(exc_traceback, limit=2, file=sys.stdout)
print()
print("*** print_exception: (hard to call)")
# exc_type below is ignored on 3.5 and later
traceback.print_exception(exc_type, exc_value, exc_traceback,
limit=2, file=sys.stdout)
print()
print("*** print_exc: (best?)")
traceback.print_exc(file=sys.stdout)
print()
print("*** format_exc: (return str)")
formatted_lines = traceback.format_exc()
print(traceback.format_exc())
print()
print("*** format_exception:")
# exc_type below is ignored on 3.5 and later
print(repr(traceback.format_exception(exc_type, exc_value,
exc_traceback)))
print()
print("*** extract_tb:")
print(repr(traceback.extract_tb(exc_traceback)))
print()
print("*** format_tb:")
print(repr(traceback.format_tb(exc_traceback)))
print()
print("*** tb_lineno:", exc_traceback.tb_lineno)
*** print_tb: (too simple) File "<ipython-input-39-876ae2ac6b33>", line 10, in <module> main() File "<ipython-input-39-876ae2ac6b33>", line 4, in main my_exc() *** print_exception: (hard to call) Traceback (most recent call last): File "<ipython-input-39-876ae2ac6b33>", line 10, in <module> main() File "<ipython-input-39-876ae2ac6b33>", line 4, in main my_exc() ZeroDivisionError: division by zero *** print_exc: (best?) Traceback (most recent call last): File "<ipython-input-39-876ae2ac6b33>", line 10, in <module> main() File "<ipython-input-39-876ae2ac6b33>", line 4, in main my_exc() File "<ipython-input-39-876ae2ac6b33>", line 7, in my_exc return 1/0 ZeroDivisionError: division by zero *** format_exc: (return str) Traceback (most recent call last): File "<ipython-input-39-876ae2ac6b33>", line 10, in <module> main() File "<ipython-input-39-876ae2ac6b33>", line 4, in main my_exc() File "<ipython-input-39-876ae2ac6b33>", line 7, in my_exc return 1/0 ZeroDivisionError: division by zero *** format_exception: ['Traceback (most recent call last):\n', ' File "<ipython-input-39-876ae2ac6b33>", line 10, in <module>\n main()\n', ' File "<ipython-input-39-876ae2ac6b33>", line 4, in main\n my_exc()\n', ' File "<ipython-input-39-876ae2ac6b33>", line 7, in my_exc\n return 1/0\n', 'ZeroDivisionError: division by zero\n'] *** extract_tb: [<FrameSummary file <ipython-input-39-876ae2ac6b33>, line 10 in <module>>, <FrameSummary file <ipython-input-39-876ae2ac6b33>, line 4 in main>, <FrameSummary file <ipython-input-39-876ae2ac6b33>, line 7 in my_exc>] *** format_tb: [' File "<ipython-input-39-876ae2ac6b33>", line 10, in <module>\n main()\n', ' File "<ipython-input-39-876ae2ac6b33>", line 4, in main\n my_exc()\n', ' File "<ipython-input-39-876ae2ac6b33>", line 7, in my_exc\n return 1/0\n'] *** tb_lineno: 10