Config Router

  • Google Sheets
  • CCNA Online training
    • CCNA
  • CISCO Lab Guides
    • CCNA Security Lab Manual With Solutions
    • CCNP Route Lab Manual with Solutions
    • CCNP Switch Lab Manual with Solutions
  • Juniper
  • Linux
  • DevOps Tutorials
  • Python Array
You are here: Home / How to catch and print the full exception traceback without halting/exiting the program?

How to catch and print the full exception traceback without halting/exiting the program?

August 23, 2021 by James Palmer

traceback.format_exc() or sys.exc_info() will yield more info if that’s what you want.
import traceback
import sys

try:
do_stuff()
except Exception:
print(traceback.format_exc())
# or
print(sys.exc_info()[2])

Some other answer have already pointed out the traceback module.
Please notice that with print_exc, in some corner cases, you will not obtain what you would expect. In Python 2.x:
import traceback

try:
raise TypeError(“Oups!”)
except Exception, err:
try:
raise TypeError(“Again !?!”)
except:
pass

traceback.print_exc()

…will display the traceback of the last exception:
Traceback (most recent call last):
File “e.py”, line 7, in
raise TypeError(“Again !?!”)
TypeError: Again !?!

If you really need to access the original traceback one solution is to cache the exception infos as returned from exc_info in a local variable and display it using print_exception:
import traceback
import sys

try:
raise TypeError(“Oups!”)
except Exception, err:
try:
exc_info = sys.exc_info()

# do you usefull stuff here
# (potentially raising an exception)
try:
raise TypeError(“Again !?!”)
except:
pass
# end of useful stuff

finally:
# Display the *original* exception
traceback.print_exception(*exc_info)
del exc_info

Producing:
Traceback (most recent call last):
File “t.py”, line 6, in
raise TypeError(“Oups!”)
TypeError: Oups!

Few pitfalls with this though:

From the doc of sys_info:

Assigning the traceback return value to a local variable in a function that is handling an exception will cause a circular reference. This will prevent anything referenced by a local variable in the same function or by the traceback from being garbage collected. […] If you do need the traceback, make sure to delete it after use (best done with a try … finally statement)

but, from the same doc:

Beginning with Python 2.2, such cycles are automatically reclaimed when garbage collection is enabled and they become unreachable, but it remains more efficient to avoid creating cycles.

On the other hand, by allowing you to access the traceback associated with an exception, Python 3 produce a less surprising result:
import traceback

try:
raise TypeError(“Oups!”)
except Exception as err:
try:
raise TypeError(“Again !?!”)
except:
pass

traceback.print_tb(err.__traceback__)

… will display:
File “e3.py”, line 4, in
raise TypeError(“Oups!”)

Related

Filed Under: Uncategorized

Recent Posts

  • How do I give user access to Jenkins?
  • What is docker volume command?
  • What is the date format in Unix?
  • What is the difference between ARG and ENV Docker?
  • What is rsync command Linux?
  • How to Add Music to Snapchat 2021 Android? | How to Search, Add, Share Songs on Snapchat Story?
  • How to Enable Snapchat Notifications for Android & iPhone? | Steps to Turn on Snapchat Bitmoji Notification
  • Easy Methods to Fix Snapchat Camera Not Working Black Screen Issue | Reasons & Troubleshooting Tips to Solve Snapchat Camera Problems
  • Detailed Procedure for How to Update Snapchat on iOS 14 for Free
  • What is Snapchat Spotlight Feature? How to Make a Spotlight on Snapchat?
  • Snapchat Hack Tutorial 2021: Can I hack a Snapchat Account without them knowing?

Copyright © 2025 · News Pro Theme on Genesis Framework · WordPress · Log in