Python尝试除外

时间:2013-10-25 14:53:06

标签: python

try:
    #statement 1
    #statement 2
except Exception, err:
    print err
    pass

这可能是非常微不足道的,但直到现在我才真正想过它,我发现自己无法回答以下问题:

  1. 如果在语句1中引发错误,是否会执行语句2?

  2. 在语句1和语句2都引发错误的情况下,Exception如何处理?在上面的代码中打印出哪个错误?两个

5 个答案:

答案 0 :(得分:9)

对于你的两个问题,答案都是“不”。

只要try/except块中出现错误,try部分就会立即退出:

>>> try:
...     1/0
...     print 'hi'
... except ZeroDivisionError, e:
...     print 'error'
...
error
>>>

正如您所看到的,代码永远不会进入print 'hi'部分,即使我为它做了except

您可以阅读更多here

答案 1 :(得分:8)

来自Python文档:

  
    

如果在执行try子句期间发生异常,则跳过该子句的其余部分。然后,如果其类型匹配except关键字后面的异常,则执行except子句,然后在try语句之后继续执行。

  

因此,一旦发生错误,它就会跳到异常

http://docs.python.org/2/tutorial/errors.html

答案 2 :(得分:4)

在引发异常时,控制会在引发异常的位置离开try块,并将其提供给相应的except块。如果语句1抛出异常,则语句2将不会执行。

这也回答了你的第二个问题:你描述的情景不可能发生。

答案 3 :(得分:4)

  

1)如果在语句1中引发错误,是否会执行语句2?

没有。将提出并捕获例外情况。 据我所知,python将向上移动堆栈并在调用者

中查找异常处理程序
  

2)在语句1和语句2都引发错误的情况下,Exception如何处理?在上面的代码中打印出哪个错误?既?

语句2将不会运行,因此不会引发任何异常

try块中的任何异常都将被捕获。这就是为什么对于所有try / except子句,将try子句限制为必要的绝对最小代码量。同样,这可以避免掩盖错误。

答案 4 :(得分:2)

  

1)如果在语句中引发错误,是否会执行语句2   1?

nope,声明2未执行

  

2)在引发错误的情况下,Exception如何处理   声明1和声明2?它打印出来的错误   上面的代码?既?

只有声明1有机会引发错误,见上文

注意:如果您希望语句2始终执行,则可以将finally与try / except

一起使用