Python3.2官方文档翻译--异常抛出和自定义异常

6.4 抛出异常

Raise语句运行程序员强制抛出一个具体的异常。例如:

>>> raise NameError(HiThere)

Traceback (most recent call last):

File "<stdin>", line 1, in ?

NameError: HiThere

Raise的唯一参数描述了将要抛出的异常。这可以是一个异常的实例或者一个异常类。(继承Exception类)

如果你想要判定是否抛出了一个异常但是不想处理它,raise语句有种简单的形式可以帮助你重新抛出异常。

>>> try:

... raise NameError(HiThere)

... except NameError:

... print(An exception flew by!)

... raise

...

An exception flew by!

Traceback (most recent call last):

File "<stdin>", line 2, in ?

NameError: HiThere

6.5 用户自定义异常

程序员可以通过创建一个新异常类定义自己的异常。异常类要求直接或者间接继承exception类。 

>>> class MyError(Exception):

... def __init__(self, value):

... self.value = value

... def __str__(self):

... return repr(self.value)

...

>>> try:

... raise MyError(2

*

2)

... except MyError as e:

... print(My exception occurred, value:, e.value)

...

My exception occurred, value: 4

>>> raise MyError(oops!)

Traceback (most recent call last):

File "<stdin>", line 1, in ?

__main__.MyError: oops!

在这个例子中,异常Exception类中默认的方法_init_()被重写了。新作用就是简单创建一个value的属性。这替换了创建args属性的默认行为。

异常类可以定义其他类做的任何事情。但是常常比较简单,仅仅提供一些让异常处理器来提取的错误信息的属性。当创建一个能抛出不同异常的模块时候,习惯做法就是创建一个为这个模块异常定义的基类。子类可以为不同的错误情况创建不同的具体异常。

class Error(Exception):

"""Base class for exceptions in this module.""" 在这个模块中的异常基类

pass

class InputError(Error):

"""Exception raised for errors in the input.  输入时候抛出异常

Attributes:

expression -- input expression in which the error occurred   

message -- explanation of the error

"""

def __init__(self, expression, message):

self.expression = expression

self.message = message

class TransitionError(Error):

"""Raised when an operation attempts a state transition thats not 

Allowed. 当一个操作试图访问不允许访问的状态事务时抛出异常

Attributes:

previous -- state at beginning of transition 在事务开始时的状态

next -- attempted new state 操作新的状态

message -- explanation of why the specific transition is not allowed 解释具体事务异常不允许的原因

"""

def __init__(self, previous, next, message):

self.previous = previous

self.next = next

self.message = message

大多数异常定义以Error结尾,这和标准异常的命名有点相似。

许多标准模块定义了自己的异常,来显示在它方法中可能发生的异常。更多的详细信息请参考类节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值