其中';要提出的标准python例外列表是什么?

其中';要提出的标准python例外列表是什么?,python,exception,error-handling,Python,Exception,Error Handling,有一个我们应该注意的清单,但我不认为这些是我们应该提高自己的清单,因为它们很少适用 我很好奇,在标准python库中是否存在一个列表,除了与.NET类似的异常,我们可以自己提出的异常 或者,与提出标准异常相比,处理常见错误案例是否有不同的、更具python风格的方法 编辑:我不是问如何处理异常,而是问我可以在需要的地方提出什么类型的异常。Python的方法就是让异常从Python本身通过。例如,而不是: def foo(arg): if arg is None: raise Some

有一个我们应该注意的清单,但我不认为这些是我们应该提高自己的清单,因为它们很少适用

我很好奇,在标准python库中是否存在一个列表,除了与.NET类似的异常,我们可以自己提出的异常

或者,与提出标准异常相比,处理常见错误案例是否有不同的、更具python风格的方法


编辑:我不是问如何处理异常,而是问我可以在需要的地方提出什么类型的异常。

Python的方法就是让异常从Python本身通过。例如,而不是:

def foo(arg):
  if arg is None:
    raise SomeNoneException
  bar = arg.param
只要做:

def foo(arg):
  bar = arg.param
如果
arg
None
或没有
param
属性,则Python本身会出现异常

在Python中,这称为“EAFP”:

请求原谅比允许更容易。这是常见的Python编码 样式假定存在有效的 键、属性和捕捉 假设成立时的例外情况 错。这种干净利落的风格很流行 以许多人在场为特点 尝试并排除语句。这个 技术与LBYL形成对比(三思而后行) 许多其他语言所共有的风格 比如C

它与Python固有的duck类型哲学配合得很好


当然,这并不意味着不应该创建自己的异常,只是不需要包装已经存在的Python异常

 class MyException( Exception ): 
     pass

对于您自己的异常,创建从
Exception
派生的类,并在合适的时候抛出它们。

首先,Python为您提出了标准异常

请求原谅总比请求允许好

只需尝试该操作并让Python引发异常。如果不起作用,不要将所有内容括在
中():引发异常
。不值得写。Python已经在所有的案例中做到了这一点

如果您认为需要提出一个标准异常,那么您可能编写了太多的代码

您可能必须提出
ValueError

def someFunction( arg1 ):
    if arg1 <= 0.0:
        raise ValueError( "Guess Again." )
其次,您几乎总是希望创建自己的、独特的异常

 class MyException( Exception ): 
     pass

这就是创建应用程序特有的东西所需要的一切。

如果错误与一个标准python异常类的描述相匹配,则无论如何抛出它

常用的是
TypeError
ValueError
,您链接到的列表已经是标准列表

如果您想拥有特定于应用程序的异常,那么子类化Exception或它的一个子类就是一种方法

参考您在.NET中给出的示例
ApplicationException
最接近
RuntimeError
ArgumentNullException
可能是一个
AttributeError
(尝试调用所需的方法,让python在键入时引发异常)
AttributeOutOfRange
只是一个更具体的
ValueError
invalidoOperationException
可以是python标准库中任意数量的大致相等的异常


基本上,根据页面上的描述,选择一个能够反映您正在引发的任何错误的错误。

我似乎记得文档中培训过,只要合适,可以引发预定义的异常。例如,建议的终止方式不再是调用exit(),而是引发SystemExit

给出的另一个示例是在自定义容器类型上重用IndexError异常


当然,您的应用程序应该定义自己的异常,而不是重新调整系统异常的用途。我只是说,没有禁止在适当的地方重用它们。

可能
ValueError
会满足我的大部分需求。Thx,我在浏览列表时确实错过了!这项
arg.param
技术,是否只是检查
arg
是否是具有字段
param
的对象的实例?@WooYek:确实,您希望
arg
是这样一个对象,所以不要显式检查它,只要访问
arg.param
,Python就会抛出一个错误,如果它不在那里的话。这个家伙反对在Python中创建额外异常的想法-