52

Is it possible to do a try-except catch all that still shows the error without catching every possible exception? I have a case where exceptions will happen once a day every few days in a script running 24/7. I can't let the script die but they also don't matter since it retries regardless as long as I try except everything. So while I track down any last rare exceptions I want to log those to a file for future debugging.

example:

try:
    print(555)
except:
    print("type error: "+ str(the_error))

Any way to replace the_error with a stack trace or something similar?

grovina
  • 2,999
  • 19
  • 25
Ryan Mills
  • 939
  • 1
  • 10
  • 23

2 Answers2

119

Yes you can catch all errors like so:

try:
    print(555)
except Exception as e:
    print("type error: " + str(e))

For the stack trace I usually use the traceback module:

import traceback

try:
    print(555)
except Exception as e:
    print("type error: " + str(e))
    print(traceback.format_exc())
Cyzanfar
  • 6,997
  • 9
  • 43
  • 81
13

You can do:

   try:
       print(555)
   except Exception as err:
      print("Erro {}".format(err))

Or use raise

Docs are always your friend

Tip: Avoid use "except:"

Use something more descriptive like

...
except (ValueError, KeyError):

Unless your code is very well tested, you can't figure out every error.

user5305519
  • 3,008
  • 4
  • 26
  • 44
Joao Vitorino
  • 2,976
  • 3
  • 26
  • 55