在Python中,我可以通过两种方式提出异常
raise ValueError
raise ValueError()
除了你可以在后一种情况下提供异常消息这一事实之外,这两种风格之间有什么根本区别吗?我应该选择其中一个吗?
答案 0 :(得分:8)
都是有效的(没有意外行为):
raise的唯一参数表示要引发的异常。这必须是异常实例或异常类(派生自Exception的类)。
在我看来,如果您希望它保存数据,无论是消息(如您所说)还是自定义数据或其他任何内容,都需要使用实例。
正如@alko所说,如果你不提供实例,它将实例化一个没有参数的实例。
如果您需要强制性参数,这将无效:
>>> class MyError(Exception):
... def __init__(self, message, data=None):
... self.msg = message
... self.data = data or {}
...
>>> raise MyError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() takes at least 2 arguments (1 given)
答案 1 :(得分:7)
总结评论:没有区别。两种语法都会抛出ValueError实例。相关的excerpt from the docs:
如果是类,则在需要时将获取异常实例 通过实例化没有参数的类。