程序要提升的标准python例外列表在哪里?

Jan*_*zny 17 python error-handling exception

有一个列表标准的Python例外,我们应该看出来,但我不认为这些都是我们应该提高自己,因为他们很少适用的人.

我很好奇是否在标准python库中存在一个列表,例外类似于.NET的ApplicationException,ArgumentNullException,ArgumentOutOfRangeException,InvalidOperationException - 我们可以提出的异常?

或者是否有不同的,更加pythonic的方式来处理常见错误情况,而不是提出标准异常?

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

Gle*_*min 14

如果错误与其中一个标准python异常类的描述匹配,那么一定要抛出它.

常用的是TypeErrorValueError,你链接的列表已经是标准列表.

如果你想拥有特定于应用程序的那些,那么继承子类化Exception或其中一个后代是可行的方法.

要引用你从.NET提供的示例 ApplicationException最接近RuntimeError ArgumentNullException可能是一个AttributeError(尝试并调用你想要的方法,让python引发一个例外,一个鸭子打字) AttributeOutOfRange只是一个更具体的ValueError InvalidOperationException可能是任意数量的大致相同的例外形式python标准库.

基本上,根据http://docs.python.org/library/exceptions.html页面中的描述选择一个反映您正在提出的错误.


S.L*_*ott 13

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

请求宽恕比要求许可更好

只需尝试操作,让Python引发异常.不要把一切都包括在内if would_not_work(): raise Exception.永远不值得写.Python已经在所有情况下都这样做.

如果您认为需要引发标准异常,那么您可能编写了太多代码.

你可能要加薪ValueError.

def someFunction( arg1 ):
    if arg1 <= 0.0:
        raise ValueError( "Guess Again." )
Run Code Online (Sandbox Code Playgroud)

偶尔,你可能需要提高一个TypeError,但这很少见.

def someFunctionWithConstraints( arg1 ):
    if isinstance(arg1,float):
         raise TypeError( "Can't work with float and can't convert to int, either" )
    etc.
Run Code Online (Sandbox Code Playgroud)

其次,您几乎总是希望创建自己独特的例外.

 class MyException( Exception ): 
     pass
Run Code Online (Sandbox Code Playgroud)

这就是为您的应用创造独特和独特的东西所需的一切.


Bin*_*ile 5

我似乎记得通过文档训练可以提出预定义的异常,只要它们是合适的.例如,推荐的终止方法不再是调用exit()而是调用SystemExit.

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

当然,您的应用程序应该定义自己的异常,而不是实际重新调整系统异常.我只是说禁止在适当的时候重复使用它们.