通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

Python中自定义异常的使用举例

以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。

在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

classNetworkerror(RuntimeError):
def__init__(self,arg):
self.args=arg

在你定义以上类后,你可以触发该异常,如下所示:

try:
raiseNetworkerror("Badhostname")
exceptNetworkerror,e:
printe.args

在下面这个例子中,默认的__init__()异常已被我们重写。

>>>classMyError(Exception):
...def__init__(self,value):
...self.value=value
...def__str__(self):
...returnrepr(self.value)
...
>>>try:
...raiseMyError(2*2)
...exceptMyErrorase:
...print'Myexceptionoccurred,value:',e.value
...
Myexceptionoccurred,value:4
>>>raiseMyError,'oops!'
Traceback(mostrecentcalllast):
File"<stdin>",line1,in?
__main__.MyError:'oops!'

常见的做法是创建一个由该模块定义的异常基类和子类,创建特定的异常类不同的错误条件。

classError(Exception):
"""Baseclassforexceptionsinthismodule."""
pass

classInputError(Error):
"""Exceptionraisedforerrorsintheinput.

Attributes:
expression--inputexpressioninwhichtheerroroccurred
message--explanationoftheerror
"""

def__init__(self,expression,message):
self.expression=expression
self.message=message

classTransitionError(Error):
"""Raisedwhenanoperationattemptsastatetransitionthat'snot
allowed.

Attributes:
previous--stateatbeginningoftransition
next--attemptednewstate
message--explanationofwhythespecifictransitionisnotallowed
"""

def__init__(self,previous,next,message):
self.previous=previous
self.next=next
self.message=message

发表回复