其中';要提出的标准python例外列表是什么?
有一个我们应该注意的清单,但我不认为这些是我们应该提高自己的清单,因为它们很少适用 我很好奇,在标准python库中是否存在一个列表,除了与.NET类似的异常,我们可以自己提出的异常 或者,与提出标准异常相比,处理常见错误案例是否有不同的、更具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的方法就是让异常从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中创建额外异常的想法-