2010-05-08 106 views
18

我想知道是否在Python中有一种简单的方法来运行代码,如果try语句成功,而不是try语句本身。那是其他或最终的命令做的(我不明白他们的文档)?我知道我可以使用这样的代码:如果try语句在python中成功运行代码

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 

但我想知道是否有更短的路。

+2

使用裸“except:”是一个坏主意。除了SomeSpecificError之外,处理一个特定的异常,你知道该怎么处理,这样会更好。 '除了:'会捕获所有你不会看到的异常,包括内存不足或用户按下ctrl-C之类的东西。 – 2010-05-08 02:54:38

回答

30

你想要的“其他”:

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

耶!我终于修好了,我的代码保持打印成功,虽然异常一直在发生,但现在我知道你可以在'exept'后面使用'else'。 – answerSeeker 2017-04-30 21:07:30

11

您正在寻找else关键字:

try: 
    #code that might fail 
except SomeException: 
    #error handling if code failed 
else: 
    # do this if no exception occured 
-3

你try块应该是要执行的代码,你除了要杀死该程序。我需要更好地理解你的对象以给出更好的答案。

在OO编程中,您想要“告诉,不要问”,所以保留try块中应该发生的所有逻辑,然后在except块中处理错误处理。

+2

我不认为我倾向于同意这个答案。 “你的除外应该是杀死程序”对我来说特别难以吞咽;我们有异常处理,所以我们可以处理异常。在Python中,这种情况尤其如此,在这种情况下,可以大量使用异常并完成对迭代器的迭代,这种事件99%的时间不是程序终止条件。我不会在任何地方靠近任何其他块的解雇尝试/除非,只有在成功后,你才能继续做某件事。除此之外,其他方面通常有助于保持较短的尝试块,这非常棒。 – 2010-05-08 02:58:46

+0

你是对的。我一直在编写过去三周的测试代码,并从一个角度来看它,如果某些事情失败了,我希望测试框架知道。 我仍然很难满足对其他块的需求,它似乎中断了“尝试做这件事......如果它失败了,处理它”的流程应该不应该在事件中发生的所有事情在“尝试做这件事”一节中没有失败? 现在你有这里的逻辑,然后中断逻辑,然后逻辑中断后应该发生只有当中断不会发生...... – 2010-05-09 14:20:17

相关问题