博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3.2官方文档翻译--异常抛出和自定义异常
阅读量:4171 次
发布时间:2019-05-26

本文共 2005 字,大约阅读时间需要 6 分钟。

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结尾,这和标准异常的命名有点相似。

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

转载地址:http://eskai.baihongyu.com/

你可能感兴趣的文章
Redis整合MySQL和MyCAT分库组件(来源是我的新书)
查看>>
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>
GanttProject 使用的控件第三方包:jdnc-modifBen.jar
查看>>
ps、grep和kill联合使用杀掉进程
查看>>
openfire中的mina框架使用
查看>>
去掉Windows Messager的自动登录
查看>>
dspace可以检索中文了
查看>>
利用Eclipse编辑中文资源,配置文件
查看>>
将中文转为unicode 及转回中文函数
查看>>