【问题标题】:When would I use 'else' and 'finally' in a try-except statement in python? [duplicate]我什么时候在 python 的 try-except 语句中使用“else”和“finally”? [复制]
【发布时间】:2022-01-15 12:14:55
【问题描述】:

我的问题是两者的区别在哪里

try:
  print("Hello")
except:
  print("Something went wrong")
else:
  print("Nothing went wrong")

try:
  print("Hello")
  print("Nothing went wrong")
except:
  print("Something went wrong")

谎言。结果似乎与我相同。使用 else 语句的用例有哪些?

同样,我为什么要使用finally 语句?

try:
  print(x) #Not defined before
except:
  print("Something went wrong")
finally:
  print("The 'try except' is finished")

try:
  print(x) #Not defined before
except:
  print("Something went wrong")
print("The 'try except' is finished")

看起来还是一样的。

编辑: 我知道,'else' 和 'finally' 做什么。我只是不知道何时使用它们,因为如果没有这些语句,您似乎可以达到等效的结果。

【问题讨论】:

  • 使用没有引发错误的示例是毫无意义的。假设 every print could 会引发错误,那么它们会做完全不同的事情。如果您将某些prints 替换为raise,这应该很明显。
  • finally 总是运行,即使期望停止执行,finally 块也会运行。所以它总是运行,无论成功还是失败。
  • 嗯,我知道,'else' 和 'finally' 的作用。当我使用它时对我来说没有意义,因为我可以在“try”部分中编写“else”语句的代码并获得相同的结果。与“终于”相同。把它放在外面,在 try-except 语句之后写代码,它也总是被执行。

标签: python try-except


【解决方案1】:

只有在没有引发异常时才会执行 else 块。所以

try:
    f_noexception()
    print("hello")
except Exception
   pass
else:
    print("Hello again")

应该给你两张照片。 Personallz,我认为这有点用,你实际上并没有看到它经常被使用。 然而,finally 更有用。无论是否引发异常,finally 块都会始终执行。所以你可以用它来做一些清理工作。尤其是当您不只是捕获并处理它,而是希望它被引发时。

【讨论】:

    【解决方案2】:

    回答您的第一个问题:
    假设您的 try 块中有一个异常可能位于这两行之间
    1.print("你好")
    2.print("没有出错")
    在这种情况下,将不会打印第二行,并且控件将转到 except 块,因此输出将不同。
    答案是一样的,因为你的代码没有例外

    因此,如果您的代码中可能发生异常,并且您希望在该异常未发生时执行某些操作,请将其写入 else 块中。

    现在回答您的第二个问题:
    finally 用于即使在 try 块中发生异常也希望执行某些操作。
    同样,您的输出是相同的,因为您的 try 块中没有异常。尝试引发异常并自己查看差异。

    【讨论】:

      【解决方案3】:

      Python 中的 finally 关键字

      • finally 块总是在离开try 语句后执行。如果except 块未处理某些异常,则在执行finally 块后重新引发

      • finally 块用于释放系统资源。

      • 可以在 try 之后使用 finally 而不使用 except 块,但不能 在这种情况下处理异常。

      • finally 块无论是否处理异常都会执行。

        try:
            print(x) #Not defined before
         except:   
             print("Something went wrong")
         finally:
             #this block is always executed 
             # regardless of exception generation.
             print('This is always executed')
        

      这里,如果你的except 块执行与否,finally 块总是被执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 2017-06-26
        相关资源
        最近更新 更多