Python try/except: Showing the cause of the error after displaying my variables

前端 未结 7 803
萌比男神i
萌比男神i 2020-12-24 05:51

I\'m not even sure what the right words are to search for. I want to display parts of the error object in an except block (similar to the err object in VBScript, which has E

相关标签:
7条回答
  • 2020-12-24 06:20

    In general avoid printing variables after exceptions by hand. If this was told to every developer, so much time would be saved. Just don't do job that can be automated.

    Use a tool to upgrade your error messages instead. Once and for all.

    With just one pip install you'll get this (image taken from one of the tools): without inserting tons of prints and formats inside your code.

    Have a look at traceback-with-variables, tbvaccine, pretty-errors, better-exception and other pypi tools.

    0 讨论(0)
  • 2020-12-24 06:21

    In other words,

    try:
        1/0
    except Exception as e:
        print e
    

    You can get the details in the manual pages linked by Ignacio in his response.

    0 讨论(0)
  • 2020-12-24 06:22

    If you do

    except AssertionError as error:
        print(error)
    

    then that should crash your program with trace and everything as if the try/except wasn't there. But without having to change indentation and commenting out lines.

    0 讨论(0)
  • 2020-12-24 06:25
    try:  
        1 / 0 
    except Exception as e: 
        print(e)
    
    0 讨论(0)
  • 2020-12-24 06:37

    If you're expecting a DivideByZero error, you can catch that particular error

    import traceback
    try:
      x = 5
      y = 0
      print x/y
    except ZeroDivisionError:
      print "Error Dividing %d/%d" % (x,y)
      traceback.print_exc()
    except:
      print "A non-ZeroDivisionError occurred"
    

    You can manually get the line number and other information by calling traceback.print_exc()

    0 讨论(0)
  • 2020-12-24 06:41

    A better approach is to make use of the standard Python Logging module.

    import sys, traceback, logging
    
    logging.basicConfig(level=logging.ERROR)
    
    try: 
        x = 0 
        y = 1 
        z = y / x 
        z = z + 1 
        print "z=%d" % (z) 
    except: 
        logging.exception("Values at Exception: x=%d y=%d " % (x,y))
    

    This produces the following output:

    ERROR:root:Values at Exception: x=0 y=1 
    Traceback (most recent call last):
      File "py_exceptions.py", line 8, in <module>
        z = y / x
    ZeroDivisionError: integer division or modulo by zero
    

    The advantage of using the logging module is that you have access to all the fancy log handlers (syslog, email, rotating file log), which is handy if you want your exception to be logged to multiple destinations.

    0 讨论(0)
提交回复
热议问题