Python3.2官方文档翻译--异常抛出和自定义异常
Python3.2官方文档翻译--异常抛出和自定义异常,有需要的朋友可以参考下。
6.4 抛出异常
Raise语句运行程序员强制抛出一个具体的异常。例如:
>>>raiseNameError(’HiThere’)
Traceback(mostrecentcalllast):
File"<stdin>",line1,in?
NameError:HiThere
Raise的唯一参数描述了将要抛出的异常。这可以是一个异常的实例或者一个异常类。(继承Exception类)
如果你想要判定是否抛出了一个异常但是不想处理它,raise语句有种简单的形式可以帮助你重新抛出异常。
>>>try:
...raiseNameError(’HiThere’)
...exceptNameError:
...print(’Anexceptionflewby!’)
...raise
...
Anexceptionflewby!
Traceback(mostrecentcalllast):
File"<stdin>",line2,in?
NameError:HiThere
6.5 用户自定义异常程序员可以通过创建一个新异常类定义自己的异常。异常类要求直接或者间接继承exception类。
>>>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!’
在这个例子中,异常Exception类中默认的方法_init_()被重写了。新作用就是简单创建一个value的属性。这替换了创建args属性的默认行为。
异常类可以定义其他类做的任何事情。但是常常比较简单,仅仅提供一些让异常处理器来提取的错误信息的属性。当创建一个能抛出不同异常的模块时候,习惯做法就是创建一个为这个模块异常定义的基类。子类可以为不同的错误情况创建不同的具体异常。
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
大多数异常定义以Error结尾,这和标准异常的命名有点相似。
许多标准模块定义了自己的异常,来显示在它方法中可能发生的异常。更多的详细信息请参考类节