Python:仅在try块失败时运行异常块

时间:2017-01-12 16:31:36

标签: python error-handling try-catch

我无法理解如何编写一个try除了块只运行一个块或另一个块而不只是块的一半然后移动到异常,如我的示例中所示f 或强调我不希望如果尝试中的任何一行失败,则运行try的任何部分

x = 1
y = 1


try:  
    x = x+1
    print(x)
    x.append(1)
except:
    print(x)

返回

2
2

而不是返回

1
正如我所预期的那样。这对我来说是有问题的,因为我愚蠢地认为除了块之外只会在尝试失败时执行。我正在使用漂亮的汤来抓取网站,我的汤分配通常会抛出异常而另一个块将运行但是在此之后无法预料的错误允许附加一些列表然后运行异常块并再次附加它们。给我留下不同长度的列表,取决于它们落在每个区块内的位置。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

你可以将computed_result的值重置为x,除非出现错误:

x = 1
y = 1
computed_value = 0

try:  
    computed_value = x + 1
    #print(fallback_var)
    computed_value.append(1)
    print("Exceution succeed: keeping value")
except:
    print("Exceution failed: resetting value")
    computed_value = x
    #print(x)


print(computed_value)

答案 1 :(得分:1)

让我们一步一步走:

您的代码正确执行x=x+1(现在x为2)。

然后它正确执行print(x)(因此它打印2)。

然后它尝试执行x.append(1)(并失败)

由于它append(1)未能进入除外并执行print(x)(因此它打印2)

它完全输出预期的结果。

答案 2 :(得分:0)

这两个都运行。

您的代码

while(q!=null)
{
    q = new ListNode(p==null?0:p.val ^ q.val ^(q.next==null?0:q.next.val)^((q.next==null?0:(q.next.val =p.val)))^(p.val=q.val));
}

当python开始执行时,它逐行执行

try:  
    x = x+1
    print(x)
    x.append(1)
except:
    print(x)

x = x + 1 成为x

然后

2

在输出中首先打印print (x)

2

以上语句引发了代码中x.append(1) 子句捕获的异常。

请注意,except值已更改为x2中的x = x + 1。在except执行

print (x)

再次打印2