在 try block 中引发错误的 pythonic 方式

标签 python exception try-catch

我有一个方法可以检查一些东西

  • 自己引发异常
  • 返回真值
  • 返回错误

我想正确地捕获异常以自己引发异常,但如果测试返回 False 也是如此。错误的做法是

try:
    if not check():
        raise MyException()
except:
    raise MyException()

因为第一个 MyExceptionexcept 之后再次被捕获。正确处理这个问题的一种方法是

try:
    flag = check()
except:
    raise MyException()
else:
    if not flag:
        raise MyException()

这是处理这种情况的唯一方法,还是有另一种更有效的方法来处理它,摆脱 flag 变量?

最佳答案

你永远不应该使用 except: 因为它会捕获所有异常,包括 SystemExit,你应该这样做:

try:
    if not check():
        raise MyNewException()
except ExceptionRaisedByCheck:
    raise MyNewException()

如果来自 check() 的异常与您要引发的异常相同,您应该更改它。

编辑:如果异常相同,您也可以简单地执行此操作(Mark Byers 在他的回答中有这个,但现在不见了):

if not check():
    raise TheSameException()

这将传播异常或如果为 False 则引发。

关于在 try block 中引发错误的 pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724087/

相关文章:

实例化 AlertDialog 中断的 Android UncaughtExceptionHandler

python - 在 Bokeh 服务应用程序中绘制本地镜像

java - 在不使用 Callable 的情况下从线程引发异常?

python - 使用另一个索引列表对列表进行排序

JAVA - 不可写 channel 异常

python - 类方法包装函数-参数问题

c# - 如何使用 C# 在 asp.net 的警告框中显示异常变量值

coldfusion - 使用 cfscript 捕获自定义异常

python - 从原始输入附加到列表

python - 如何使用 Python 模块 wpa_supplicant 连接到安全 WiFi?