Python:仅在try块失败时运行异常块
我很难理解如何编写一个try-except块,该块只运行一个块或另一个块,而不是一半块,然后移动到异常,如我的示例f或emphasis所示。如果try中的任何一行失败,我不希望运行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失败时执行
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)