Jan*_*zny 17 python error-handling exception
有一个列表标准的Python例外,我们应该看出来,但我不认为这些都是我们应该提高自己,因为他们很少适用的人.
我很好奇是否在标准python库中存在一个列表,例外类似于.NET的ApplicationException,ArgumentNullException,ArgumentOutOfRangeException,InvalidOperationException - 我们可以提出的异常?
或者是否有不同的,更加pythonic的方式来处理常见错误情况,而不是提出标准异常?
编辑:我不是在询问如何处理异常,而是我可以在需要的地方提出什么类型.
Gle*_*min 14
如果错误与其中一个标准python异常类的描述匹配,那么一定要抛出它.
常用的是TypeError和ValueError,你链接的列表已经是标准列表.
如果你想拥有特定于应用程序的那些,那么继承子类化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)
这就是为您的应用创造独特和独特的东西所需的一切.
我似乎记得通过文档训练可以提出预定义的异常,只要它们是合适的.例如,推荐的终止方法不再是调用exit()而是调用SystemExit.
给出的另一个示例是在自定义容器类型上重用IndexError异常.
当然,您的应用程序应该定义自己的异常,而不是实际重新调整系统异常.我只是说禁止在适当的时候重复使用它们.