python异常处理中的Else子句应用程序

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

为了处理 python中的异常,我们使用以下模式:

try:
   # do something
except NameError:
   # Do something for NameError exceptions
except:
   # Do something for other exceptions
   raise
else: 
   # Do something when didn't exist any exception
finally: 
   # Do something whether an exception has occurred or not
#rest of codes

我的问题是:

# do something for else和之间有什么区别# rest of codes哪一个优于另一个且更具原则性?

提问于
用户回答回答于

else块将在finally块之前执行,“其余代码”块将在finally块之后执行。

如果你没有finally块,那么实际上没有任何区别,我怀疑else完全删除块会导致代码更清晰,更易读。

用户回答回答于

我尝试用示例进行演示,因此我稍微编辑了您的代码,仅关注相关部分。

lst = [123, 512, 251]
for i in range(6):
    try:
       print(lst[i])
    except IndexError:
       print(f"Index {i} not there")
    else: 
       print("HELLO")
    finally:
       pass
    print("WORLD")

这是输出:

123
HELLO
WORLD
512
HELLO
WORLD
251
HELLO
WORLD
Index 3 not there
WORLD
Index 4 not there
WORLD
Index 5 not there
WORLD

因此,正如您所看到的,当try块中的代码成功运行时,块中的代码else也会运行。但代码是#rest of the codes独立运行的。

扫码关注云+社区

领取腾讯云代金券