Some_function()在执行时引发异常,因此程序跳转到异常:
try:
some_function()
except:
print("exception happened!")
如何查看导致异常发生的原因?
Some_function()在执行时引发异常,因此程序跳转到异常:
try:
some_function()
except:
print("exception happened!")
如何查看导致异常发生的原因?
当前回答
除非某个函数是一个编码非常糟糕的遗留函数,否则你不应该需要你所要求的。
使用多个except子句以不同的方式处理不同的异常:
try:
someFunction()
except ValueError:
# do something
except ZeroDivision:
# do something else
重点是不应该捕获通用异常,而应该只捕获需要捕获的异常。我相信您不希望看到意外的错误或bug。
其他回答
在Python 2中,以下代码很有用
except Exception, exc:
# This is how you get the type
excType = exc.__class__.__name__
# Here we are printing out information about the Exception
print 'exception type', excType
print 'exception msg', str(exc)
# It's easy to reraise an exception with more information added to it
msg = 'there was a problem with someFunction'
raise Exception(msg + 'because of %s: %s' % (excType, exc))
实际的异常可以通过以下方式捕获:
try:
i = 1/0
except Exception as e:
print e
您可以从Python教程中了解有关异常的更多信息。
这些答案很适合调试,但对于以编程方式测试异常,isinstance(e, SomeException)可能很方便,因为它也测试SomeException的子类,因此您可以创建应用于异常层次结构的功能。
为了补充Lauritz的答案,我创建了一个用于异常处理的装饰器/包装器,并且包装器记录发生了哪种类型的异常。
class general_function_handler(object):
def __init__(self, func):
self.func = func
def __get__(self, obj, type=None):
return self.__class__(self.func.__get__(obj, type))
def __call__(self, *args, **kwargs):
try:
retval = self.func(*args, **kwargs)
except Exception, e :
logging.warning('Exception in %s' % self.func)
template = "An exception of type {0} occured. Arguments:\n{1!r}"
message = template.format(type(e).__name__, e.args)
logging.exception(message)
sys.exit(1) # exit on all exceptions for now
return retval
这可以在类方法或带有装饰器的独立函数上调用:
@general_function_handler
完整的例子请参阅我的博客:http://ryaneirwin.wordpress.com/2014/05/31/python-decorators-and-exception-handling/
你可以像Lauritz推荐的那样开始:
except Exception as ex:
然后像这样打印ex:
try:
#your try code here
except Exception as ex:
print ex