2013-10-25 40 views
1
try: 
    #statement 1 
    #statement 2 
except Exception, err: 
    print err 
    pass 

这可能是很微不足道,但我从来没有真正想过这个问题到现在为止,我发现自己不能够回答以下问题:Python的尝试,除了

  1. 是否语句2被如果执行声明1中出现错误?

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

+0

用于您的问题,这可能有助于使“点击”在你的脑海:如果有一个错误在陈述1中,你怎样才能保证陈述2会做正确的事情? – Izkata

+0

@Izkata touche。 – ealeon

+0

你从来没有想过只是自己尝试一下吗? – poke

回答

6

答案对您的两个问题都是“否”。

只要一个错误是在try/except块抛出,try部分立刻退出:

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

正如你看到的,代码不会继续执行print 'hi'一部分,尽管我做了一个except为了它。

您可以阅读更多here

1

1)是否如果错误在声明中 1提出声明2被执行?

不,语句2不执行

2)如何异常处理的情况下将错误上调 两个语句1和语句2?上面代码中的 打印出哪个错误?都?

唯一的语句1有一定几率产生一个错误,见上面,

注意:如果你想声明2始终执行,你可以使用finally与尝试/除

3

在一个异常被提出的控制离开try区块在异常被引发的时候被提供给合适的except区块。如果语句1抛出异常,语句2将不会执行。

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

3

1)如果语句1中出现错误,语句2是否被执行?

号异常将被提出和捕获。 据我了解蟒蛇将向上移动堆栈和呼叫者查找异常处理程序

2)如何异常处理在引发错误两种说法1和2陈述的情况下?在上面的代码中打印出哪个错误?都?

语句2将不会被运行,因此没有例外将提高它

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

7

从Python文档:

如果try子句执行过程中发生异常,该条款的其余部分被跳过。然后,如果它的类型匹配以except关键字命名的异常,则会执行except子句,然后在try语句之后继续执行。

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

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

+5

+1引用文档。 – cdhowie