在Python中如果try语句成功运行,如何执行代码

49
我在想,Python 中是否有一种简单的方法可以在 try 语句成功执行后运行代码,而不是在 try 语句本身中。else 或 finally 命令是否可以实现这一点(我没有理解它们的文档)?我知道我可以使用以下代码:
successful = False
try:
    #code that might fail
    successful = True
except:
    #error handling if code failed
if successful:
    #code to run if try was successful that isn't part of try

但我想知道是否有更简单的方法。


3
使用裸露的 except: 是个不好的主意。更好的方式是使用 except SomeSpecificError: 并处理你知道如何处理的特定异常。except: 会捕捉到各种你没有预料到的异常,包括内存耗尽或用户按下 ctrl-C 等情况。 - Mike Graham
通常建议使用except Exception - ATH
3个回答

81

你想要使用else

for i in [0, 1]:
    try:
        print '10 / %i: ' % i, 10 / i
    except:
        print 'Uh-Oh'
    else:
        print 'Yay!'

24
你正在寻找else关键字:
try:
    #code that might fail
except SomeException:
    #error handling if code failed
else:
    # do this if no exception occured

-6

你的 try 块应该是你想要执行的代码,而你的 except 块应该杀死程序。我需要更好地了解你的对象才能给出更好的答案。

在面向对象编程中,你想要“告诉,不要询问”,因此将应该发生的所有逻辑保留在 try 块中,然后将错误处理放在 except 块中。


7
我不认为我倾向于同意这个答案。“你的异常应该终止程序”对我来说特别难以接受;我们有异常处理,所以我们可以处理异常。在Python中尤其如此,因为异常经常被大量使用,比如完成迭代器的迭代,在99%的情况下并不是一个导致程序终止的条件。我不会轻易地否定在try/except中使用else块,在成功时继续做某些事情。除此之外,else通常有助于保持try块的简短,这很不错。 - Mike Graham
1
你说得完全正确。我过去三周一直在编写测试代码,并从这样的角度来处理:如果某些东西失败了,我希望测试框架能够知道。我仍然很难理解 else 块的必要性,它似乎会破坏“尝试做这件事...如果失败了,则处理它”的流程。难道不应该在“尝试做这件事”部分中处理所有无故障事件发生时应该发生的事情吗?现在你有逻辑,然后是中断逻辑,然后是在中断之后应该发生的逻辑,但这只有在没有中断发生时才会发生... - Zee Spencer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接