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

不羁的心 提交于 2019-12-29 16:34:31

问题


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 Err.Number and Err.Description). For example, I want to show the values of my variables, then show the exact error. Clearly, I am causing a divided-by-zero error below, but how can I print that fact?

try: 
    x = 0 
    y = 1 
    z = y / x 
    z = z + 1 
    print "z=%d" % (z) 
except: 
    print "Values at Exception: x=%d y=%d " % (x,y) 
    print "The error was on line ..." 
    print "The reason for the error was ..." 

回答1:


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



回答2:


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()




回答3:


The string value of the exception object will give you the reason. The traceback module will allow you access to the full traceback.




回答4:


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.




回答5:


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.




回答6:


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.



来源:https://stackoverflow.com/questions/4560288/python-try-except-showing-the-cause-of-the-error-after-displaying-my-variables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!