[python] 之 异常对象

一、异常对象

  类异常支持异常的层次结构:超类变成分类名称,而子类变成这个分类中特定种类的异常。except字句列出一个通用的异常超类,就可捕捉整个分类中的各种异常:任何特定的子类都可匹配。

 1 class General(Exception):pass
 2 class Specific1(General):pass
 3 class Specific2(General):pass
 4
 5 def raise0():
 6     x=General()
 7     raise x
 8
 9 def raise1():
10     x=Specific1()
11     raise x
12
13 def raise2():
14     x=Specific2
15     raise x
16
17 for func in (raise0, raise1, raise2):
18     try:
19         func()
20     except General:
21         import sys
22         print ("caught:", sys.exc_info()[0])
23
24 for func in (raise0, raise1, raise2):
25     try:
26         func()
27     except General as ins:
28 #         import sys
29         print ("caught_as:", ins.__class__)
30
31 # 输出
32 caught: <class ‘__main__.General‘>
33 caught: <class ‘__main__.Specific1‘>
34 caught: <class ‘__main__.Specific2‘>
35 caught_as: <class ‘__main__.General‘>
36 caught_as: <class ‘__main__.Specific1‘>
37 caught_as: <class ‘__main__.Specific2‘>

注意:

①必须继承内置异常超类或内置异常子类,就像object一样:

  内置Exception类:

    BaseException:异常的顶级根类

    Exception:与应用相关的异常顶层根超类

    ArithmeticErrot:所有数值错误的超类

    OverfloeError:识别特定的数值错误的子类

②引发实例

  在类异常模式中,我们总是引发和捕获一个类实例对象。异常实例可以在raise之前创建,就像上述列子,也可在raise语句自身中创建。

  可以在except errorname as instance中创建异常实例。

③捕获分类

  try语句

④异常细节

  主要是通过异常实例进行访问异常细节或异常状态。

二、异常默认打印和状态

  内置异常都提供了默认打印显示和状态保持,传给这些异常类的任何构造函数参数都会保存在实例的args元组属性中,并且当打印该实例的时候自动显示(如果没有传递构造函数参数,则使用一个空的元组和显示字符串)传递的参数(以字符串的形式显示)。

1 class E(Exception):pass
2
3 try:
4     raise E(‘spam‘,‘temp‘)
5 except E as x:
6     print (x)
7
8 #输出
9 (‘spam‘, ‘temp‘)

三、异常对象-定制打印显示

  默认情况下,捕获并打印基于类的异常的实例的时候,会显示我们传递给异常类构造函数的任何内容;如果定制显示或打印,则默认显示形式(捕获并打印)的信息为定制__str__中的内容,传递的参数可通过元组属性args访问。

  当没有捕获异常的时候,如果异常类实例作为一条出错信息的一部分显示,这个继承的默认显示模式也会使用;如果没有定制异常类,则显示传递的构造函数参数,如果定制了异常类,则显示为定制的内容。

 1 class Mybad(Exception):pass
 2
 3 try:
 4     raise Mybad(‘Sorry! my mistake!‘)
 5 except Mybad as x:
 6     print (x)
 7     print (x.args)
 8 print (‘###‘*8)
 9
10 class Bad(Exception):
11     def __str__(self, *args, **kwargs):
12         return "Always look on the bright side of life ..."
13
14 try:
15     raise Bad(‘Bad a bad ‘)
16 except Bad as y:
17     print (y)
18     print (y.args)
19 #输出
20 Sorry! my mistake!
21 (‘Sorry! my mistake!‘,)
22 ########################
23 Always look on the bright side of life ...
24 (‘Bad a bad ‘,)
1 class Mybad(Exception):
2     def __str__(self):
3         return ‘没有捕获异常‘
4
5 #输出
6 Traceback (most recent call last):
7   File "F:\python\test.py", line 265, in <module>
8     raise Mybad(‘默认‘)
9 __main__.Mybad: 没有捕获异常
 1 class Mybad(Exception):pass
 2
 3 raise Mybad(‘默认‘)
 4
 5 #输出
 6
 7 Traceback (most recent call last):
 8   File "F:\python\test.py", line 265, in <module>
 9     raise Mybad(‘默认‘)
10 __main__.Mybad: 默认

四、定制数据和行为

  类似与类的继承、定制、扩展;

  使用了异常类实例(如:except Exception as instance)

时间: 2024-10-11 22:39:44

[python] 之 异常对象的相关文章

python之异常

8.1 什么是异常 python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(一种错误信息)终止执行: >>>1/0 报错 如果这些错误信息就是异常的全部功能,那么它也就不必存在了.事实上,每个异常都是一个类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,使得程序可以捉住错误并且对其进行处理,而不是让整个程序失败. 8.2.1 raise 语句 为了引发异常,可以使用一个类(exception的子类)或者实例参数调用rai

python基础-异常

什么是异常? python用异常对象(exception object)来表示异常情况.遇到错误后,就会引发异常.如果异常未被处理或捕获,程序就会用所谓的回溯(traceback)终止执行. >>> 1 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo b

Python常用异常及处理方法

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIter

python之文件对象

防伪码忘情公子著 文件对象是用来访问文件系统接口所对应的数据的 文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构-即在磁盘上组织文件的方法 计算机文件或称文件.电脑档案.档案是存储在某种长期储存设备或临时存储设备中的一段数据流并且归属于计算机文件系统管理之下 概括来讲 文件是计算机中由OS管理的具有名字的存储区域 在Linux系统上文件被看做是字节序列 要想把数据存储到文件中有一个前提那就是必须序列化非序列化的数据是不能简单的存储在文件系统中的文件中的 对于python来说文件对象不仅可

python之-- 异常

异常处理: 语法:try: codeexcept (KeyError..可以写多个) as e: error为抓取的多个错误提示,e为错误信息 print(e) # 打印错误信息except (IndexError) as e: print(e)except Exception as e: # 上面方法无法捕捉到的错误,在这里统统捕获 print('未知错误 ',e)else: # 当没有出现错误,则执行这里 print('一切正常')finally: print('不管有没有错误,都会执行这里

python常见异常分类与处理方法

Python常见异常类型大概分为以下类: 1.AssertionError:当assert断言条件为假的时候抛出的异常 2.AttributeError:当访问的对象属性不存在的时候抛出的异常 3.IndexError:超出对象索引的范围时抛出的异常 4.KeyError:在字典中查找一个不存在的key抛出的异常 5.NameError:访问一个不存在的变量时抛出的异常 6.OSError:操作系统产生的异常 7.SyntaxError:语法错误时会抛出此异常 8.TypeError:类型错误,

python动态获取对象的属性和方法

http://blog.csdn.net/kenkywu/article/details/6822220首先通过一个例子来看一下本文中可能用到的对象和相关概念.01     #coding: UTF-802     import sys #  模块,sys指向这个模块对象03     import inspect04     def foo(): pass # 函数,foo指向这个函数对象05      06     class Cat(object): # 类,Cat指向这个类对象07    

Python 标准异常总结

在我们编写脚本或者进行软件开发过程中总会遇见很多的异常和错误,而python里面有两个非常重要的功能,能够很好的处理异常和任何意外错误,这两个功能就是异常处理和断言. 异常处理:主要包含语法错误和其他的标准异常,标准异常介绍如下表. 断言:断言是一种理智检查,当程序的测试完成,你可以打开或关闭.断言的最简单的方法就是把它比作 raise-if 语句 (或者更准确,加 raise-if-not 声明). 一个表达式进行测试,如果结果出现 false,将引发异常.断言是由 assert 语句,在Py

python动态获取对象的属性和方法 (转载)

首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__(self, name='Kitty'): self.name = name def sayHi(self): print self.name, 'says Hi!' cat = Cat() print Cat.sayHi print cat.sayHi 有时候我们会碰到这样的需求,需要执行对象的某