Python:关于捕获任何exception

如何写一个try / except块来捕获所有exception?

你可以,但你不应该:

 try: do_something() except: print "Caught it!" 

但是,这也将捕获像KeyboardInterruptexception,你通常不希望这样做,是吗? 除非您立即重新提出exception – 请参阅文档中的以下示例:

 try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror) except ValueError: print "Could not convert data to an integer." except: print "Unexpected error:", sys.exc_info()[0] raise 

除了一个裸的except:子句(正如其他人所说,你不应该使用),你可以简单地捕捉Exception

 import traceback import logging try: whatever() except Exception as e: logging.error(traceback.format_exc()) # Logs the error appropriately. 

您通常只会考虑在代码的最外层执行此操作,例如,如果您想在终止之前处理任何其他未捕获的exception。

except Exception的优点, except Exception有一些例外,它不会被捕获,最明显的是KeyboardInterruptSystemExit :如果你抓住并吞下那些,那么你可以让任何人都难以退出你的脚本。

你可以这样做来处理一般的例外

 try: a = 2/0 except Exception as e: print e.__doc__ print e.message 

非常简单的例子,类似于这里find的一个:

http://docs.python.org/tutorial/errors.html#defining-clean-up-actions

如果您试图捕获所有exception,则将所有代码放在“try:”语句中,而不是“打印”执行可能会引发exception的操作。

 try: print "Performing an action which may throw an exception." except Exception, error: print "An exception was thrown!" print str(error) else: print "Everything looks great!" finally: print "Finally is called directly after executing the try statement whether an exception is thrown or not." 

在上面的例子中,你会看到输出顺序:

1)执行可能抛出exception的动作。

2)最后在执行try语句后直接调用是否抛出exception。

3)“抛出exception!” 或者“一切看起来很棒!” 取决于是否抛出exception。

希望这可以帮助!

要捕获所有可能的exception,请捕获BaseException 。 它位于Exception层次结构的顶部:

Python 3: https : //docs.python.org/3.5/library/exceptions.html#exception-hierarchy

Python 2.7: https : //docs.python.org/2.7/library/exceptions.html#exception-hierarchy

 try: something() except BaseException as error: print('An exception occurred: {}'.format(error)) 

但正如其他人所说,除非你有一个很好的理由,否则通常不应该这样做。

我刚刚发现了这个testingPython 2.7中的exception名称的小技巧。 有时我已经在代码中处理了特定的exception,所以我需要一个testing,看看这个名字是否在处理的exception列表中。

 try: raise IndexError #as test error except Exception as e: excepName = type(e).__name__ # returns the name of the exception 
 try: whatever() except: # this will catch any exception or error 

值得一提的是这不是正确的Python编码。 这也会捕捉到许多你可能不想捕捉的错误。