Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与类的实例相比,引发错误类的利弊是什么_Python_Python 3.x - Fatal编程技术网

Python 与类的实例相比,引发错误类的利弊是什么

Python 与类的实例相比,引发错误类的利弊是什么,python,python-3.x,Python,Python 3.x,以下内容似乎具有相同的效果: >>> raise NotImplementedError Traceback (most recent call last): File "<stdin>", line 1, in <module> NotImplementedError >>> raise NotImplementedError() Traceback (most recent call last): File "<st

以下内容似乎具有相同的效果:

>>> raise NotImplementedError
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NotImplementedError

>>> raise NotImplementedError()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NotImplementedError
>>引发未实现错误
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
未实现错误
>>>引发未实现的错误()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
未实现错误

有区别吗?如果有,各有哪些优点和缺点?

没有区别:

>>> try:
...     raise NotImplementedError
... except Exception as e:
...     pass
...
>>> e
NotImplementedError()
>>> type(e)
<type 'exceptions.NotImplementedError'>
>>> type(NotImplementedError)
<type 'type'>
>>> type(NotImplementedError())
<type 'exceptions.NotImplementedError'>
>>>
>>试试:
...     引发未实现的错误
... 例外情况除外,如e:
...     通过
...
>>>e
NotImplementedError()
>>>类型(e)
>>>类型(未实现错误)
>>>类型(NotImplementedError())
>>>

参见文件第8.4节:

没有区别:

>>> try:
...     raise NotImplementedError
... except Exception as e:
...     pass
...
>>> e
NotImplementedError()
>>> type(e)
<type 'exceptions.NotImplementedError'>
>>> type(NotImplementedError)
<type 'type'>
>>> type(NotImplementedError())
<type 'exceptions.NotImplementedError'>
>>>
>>试试:
...     引发未实现的错误
... 例外情况除外,如e:
...     通过
...
>>>e
NotImplementedError()
>>>类型(e)
>>>类型(未实现错误)
>>>类型(NotImplementedError())
>>>

参见文档第8.4节:

如果exception类不需要参数进行初始化,则本质上没有区别:

如果传递了异常类,它将被隐式地实例化 不带参数调用其构造函数

[我的重点]

否则,将出现另一个异常,抱怨实例的初始化:

class MyException(Exception):
   def __init__(self, arg):
      pass

raise MyException

回溯(最近一次呼叫最后一次):
文件“python”,第6行,在
TypeError:\uuuu init\uuuuuu()正好接受2个参数(给定1个)
显然,您可以通过向自定义异常类传递自定义参数或向内置异常类传递自定义消息来完成更多工作:

>>> raise ValueError('number must be 42')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: number must be 42
>提升值错误('数字必须为42')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数字必须为42

上述内容比无用的
ValueError

提供了更多的信息(从用户的角度来看,这是非常可取的),如果exception类不需要参数进行初始化,则本质上没有区别:

如果传递了异常类,它将被隐式地实例化 不带参数调用其构造函数

[我的重点]

否则,将出现另一个异常,抱怨实例的初始化:

class MyException(Exception):
   def __init__(self, arg):
      pass

raise MyException

回溯(最近一次呼叫最后一次):
文件“python”,第6行,在
TypeError:\uuuu init\uuuuuu()正好接受2个参数(给定1个)
显然,您可以通过向自定义异常类传递自定义参数或向内置异常类传递自定义消息来完成更多工作:

>>> raise ValueError('number must be 42')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: number must be 42
>提升值错误('数字必须为42')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数字必须为42
上述内容比空洞的
ValueError
更具信息性(从用户的角度来看,这是非常可取的)