Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:仅在try块失败时运行异常块_Python_Error Handling_Try Catch - Fatal编程技术网

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

Python:仅在try块失败时运行异常块,python,error-handling,try-catch,Python,Error Handling,Try Catch,我很难理解如何编写一个try-except块,该块只运行一个块或另一个块,而不是一半块,然后移动到异常,如我的示例f或emphasis所示。如果try中的任何一行失败,我不希望运行try的任何部分 x = 1 y = 1 try: x = x+1 print(x) x.append(1) except: print(x) 返回 2 2 而不是返回 1 正如我所料。这对我来说是有问题的,因为我愚蠢地认为只有except block才会在try失败时执行

我很难理解如何编写一个try-except块,该块只运行一个块或另一个块,而不是一半块,然后移动到异常,如我的示例f或emphasis所示。如果try中的任何一行失败,我不希望运行try的任何部分

x = 1
y = 1


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

2
2
而不是返回

1
正如我所料。这对我来说是有问题的,因为我愚蠢地认为只有except block才会在try失败时执行。我正在使用beautiful soup抓取网站,我分配的一个soup通常会抛出异常,另一个块将运行,但在此之后出现意外错误,允许追加一些列表,然后运行异常块并再次追加它们。留给我的是不同长度的列表,这取决于它们在每个块中的位置

非常感谢您的任何帮助

本次跑步将同时进行

你的代码

try:  
    x = x+1
    print(x)
    x.append(1)
except:
    print(x)
当python开始执行时,它会逐行执行

x = x + 1
在此之后,
x
变为
2

然后

打印
2
,作为输出中的第一个

x.append(1)
上述语句引发异常,该异常被代码中的
except
子句捕获

请记住,
x
值已在
x=x+1
station中更改为
2
。在<代码>中,但执行此操作时除外

print (x)
它再次打印
2

让我们一步一步来:

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

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

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

由于它未能
附加(1)
,因此它进入except并执行
打印(x)
(因此它打印2)


它输出的正是预期的结果。

您可以将计算结果重置为
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)

但是你的试块失败了
x.append(1)
引发异常,因为x是一个整数。@DanielRoseman我不希望Try块的任何给定部分在失败时运行,就像在我的示例中,我希望返回1而不是2,但这没有意义。它必须运行,才能知道它是否失败。Python无法取消打印已经打印的文本,并且它不记得刚刚增加了哪些值,因此可以取消这些值的增量。如果你想重置程序状态,你必须自己手动重置。可能重复感谢Maurice,我希望有更优雅的东西,但我认为我可以做到。更优雅的可以是定制的。
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)