【问题标题】:Create custom exceptions?创建自定义异常?
【发布时间】:2016-02-09 15:31:20
【问题描述】:

有没有办法缩短以下场景,所以我不必使用丑陋的嵌套 try except 语句?

class Error(Exception):
    def __init__(self):
        print("That did not work")
try:
    try:
        gblgbl
    except:
        raise Error
except Error:
    pass

我想要的可以描述为以下伪代码:

Try something:
    something
if something went wrong:
    raise Error
catch Error:
    what to do if error occours

如果 try 语句成功,我不想引发错误,但是如果我在异常语句中引发异常,如下所示:

try:
    gblgbl
except:
    raise Error
except Error:
    pass

它不能被其他异常捕获,因为已经有一个异常捕获了 python 异常并且解释器抛出了一个 SyntaxError。

我错过了什么明显的东西吗?

我知道你可能永远不会在实际程序中使用它,但我对这个理论很好奇。

【问题讨论】:

  • 我认为这已经通过stackoverflow.com/questions/1319615/…得到了答案
  • 除了@jefcabatingan this blog post 提到的问题可能也很有趣。
  • 您所做的只是翻译 any,除非gblgbl 执行为Error 异常,然后立即处理它。您实际上并不需要内部异常子句来执行此操作。

标签: python python-3.x


【解决方案1】:

这里没有理由使用异常。下面的(伪)代码实现了同样的目的。

try:
    gblgbl
except:
    pass

但是请注意,捕获所有异常通常是个坏主意,因为例如KeyboardInterrupt 异常也会被捕获,因此不能使用Ctrl-c 中断程序

【讨论】:

  • 当然,但我可以做一些事情,比如计算错误类的类变量中发生此异常的次数。
  • 但这仍然错过了异常的要点,即向调用者发出错误信号。您的示例也可以使用任何其他计数器来实现,并且不需要单独的 try-except
【解决方案2】:

创建自定义异常?

Python Tutorial 有一个关于User-defined Exceptions 的部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2011-04-26
    • 2019-02-28
    • 2023-04-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多