【问题标题】:running code if try statements were successful in python如果 try 语句在 python 中成功,则运行代码
【发布时间】:2011-02-17 01:35:05
【问题描述】:

我想知道在 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

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

【问题讨论】:

  • 使用except: 是个坏主意。最好使用except SomeSpecificError: 并处理您知道如何处理的特定异常。 except: 会捕获各种你不注意的异常,包括内存不足或用户按 ctrl-C。
  • except Exception 一般推荐

标签: python error-handling try-catch


【解决方案1】:

您正在寻找else 关键字:

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

【讨论】:

    【解决方案2】:

    你想要else:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不认为我倾向于同意这个答案。 “你的例外应该杀死程序”对我来说尤其难以接受;我们有异常处理,所以我们可以处理异常。在 Python 中尤其如此,在 Python 中,异常被大量使用,并且对于像完成迭代器这样的事情,99% 的时间都不是程序结束条件的事件。我不会在 try/except 上全面解雇 else 块,只有在成功后你才能继续做某事。除此之外,else 通常有助于缩短 try 块,这很棒。
      • 你说得对。在过去的 3 周里,我一直在编写测试代码,并从如果某事失败我希望测试框架知道的角度来处理它。我仍然很难理解对 else 块的需求,它似乎扰乱了“尝试做这件事......如果失败,处理它”的流程,如果没有应该发生的一切不应该“尝试做这件事”部分失败?现在你在这里有逻辑,然后是中断逻辑,然后是中断后的逻辑,只有在中断没有发生时才应该发生......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2012-11-29
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多