python笔记--异常处理

异常处理

异常就是程序出现错误无法正常工作了,异常处理是通过一些方法对出现的错误进行捕捉,友好地显示出来或进行相应的处理,使得程序能够更长时间运行。

1.异常种类

常见的:

SyntaxError          语法错误

IndentationError  缩进错误

TypeError            对象类型与要求不符合

ImportError          模块或包导入错误;一般路径或名称错误

KeyError             字典里面不存在的键

NameError            变量不存在

IndexError           下标超出序列范围

IOError              输入/输出异常;一般是无法打开文件

AttributeError       对象里没有属性

KeyboardInterrupt  键盘接受到 Ctrl+C

Exception            通用的异常类型;一般会捕捉所有异常

查看所有的异常种类:

>>> import exceptions
>>> dir(exceptions)
[‘ArithmeticError‘, ‘AssertionError‘, ‘AttributeError‘, ‘BaseException‘, ‘BufferError‘, ‘BytesWarning‘, ‘DeprecationWarning‘, ‘EOFError‘, ‘EnvironmentError‘, ‘Exception‘, ‘FloatingPointError‘, ‘FutureWarning‘, ‘GeneratorExit‘, ‘IOError‘, ‘ImportError‘, ‘ImportWarning‘, ‘IndentationError‘, ‘IndexError‘, ‘KeyError‘, ‘KeyboardInterrupt‘, ‘LookupError‘, ‘MemoryError‘, ‘NameError‘, ‘NotImplementedError‘, ‘OSError‘, ‘OverflowError‘, ‘PendingDeprecationWarning‘, ‘ReferenceError‘, ‘RuntimeError‘, ‘RuntimeWarning‘, ‘StandardError‘, ‘StopIteration‘, ‘SyntaxError‘, ‘SyntaxWarning‘, ‘SystemError‘, ‘SystemExit‘, ‘TabError‘, ‘TypeError‘, ‘UnboundLocalError‘, ‘UnicodeDecodeError‘, ‘UnicodeEncodeError‘, ‘UnicodeError‘, ‘UnicodeTranslateError‘, ‘UnicodeWarning‘, ‘UserWarning‘, ‘ValueError‘, ‘Warning‘, ‘WindowsError‘, ‘ZeroDivisionError‘, ‘__doc__‘, ‘__name__‘, ‘__package__‘]

2.捕捉异常语法

try:
pass                 #被检查的语句
except except type,e:    #except type表示要捕捉的异常种类,e是一个变量,保存了异常信息。
pass                 #”,e”可以写成”as e”

例如:

>>> try:
print a    #a是一个未定义的变量,直接执行”print a”会报NameError异常
except NameError,e:
print "Error:",e
 

Error: name ‘a‘ is not defined

注意:

如果异常可能会出现多个种类,可以写多个except。例如:

>>> a = ‘hello‘
>>> try:
    int(a)
except IndexError,e:
    print e
except KeyError,e:
    print e
except ValueError,e:
print e

如果不知道会出现什么异常,可以使用Exception捕获任意异常,例如:

>>> a=‘hello‘
>>> try:
    int(a)
except Exception,e:
    print e

如果未捕获到异常即异常种类不匹配,程序直接报错,例如:

>>> a=‘hello‘
>>> try:
b=int(a)
except IndexError,e:
print e
 

 
Traceback (most recent call last):
  File "<pyshell#27>", line 2, in <module>
    b=int(a)
ValueError: invalid literal for int() with base 10: ‘hello‘

捕捉异常的其他结构:

#else语句

try:
    pass    #主代码块
except KeyError,e:
    pass
else:
    pass    # 主代码块执行完没有异常,执行该块。

#finally语句

try:
    pass    #主代码块
except KeyError,e:
    pass
finally:
    pass    # 无论异常与否,最终都执行该块。

#try/except/else/finally组合语句,需要注意的是else和finally都要放在except之后,而finally要放在最后。

try:
    pass
except KeyError,e:
    pass
else:
    pass
finally:
    pass

4. 主动触发异常

raise可以主动抛出一个异常,例如:

>>> raise NameError(‘this is an NameError‘)
 
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise NameError(‘this is an NameError‘)
NameError: this is an NameError

#捕捉主动触发的异常

>>> try:
    raise Exception(‘error!!!‘)
except Exception,e:
    print e
 

error!!!

5.自定义异常

>>> class MyException(Exception):    #继承Exception类
    def __init__(self,msg):          #使用Exception类的__init__方法
        self.message=msg             #添加一个"message"属性,用于存放错误信息
    def __str__(self):
        return self.message
 

>>> try:
    raise MyException("myerror!")    #主动引发自定义异常
except MyException,e:    
    print e
 

myerror!

6.断言语句assert

assert用于判断条件判断语句是否为真,不为真则处罚异常,例如:

>>> assert 2>1
>>> assert 2<1

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    assert 2<1
AssertionError

#添加异常描述信息:

>>> assert 2<1,"flase"
 
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    assert 2<1,"flase"
AssertionError: flase
时间: 2024-10-10 23:48:47

python笔记--异常处理的相关文章

Python笔记(五):异常处理和数据存储

注:和上一篇有关联 (一)  finally 和 输出异常信息 try:       the_man = open(r'C:\Users\123456\Desktop\test.txt')       print(the_man.readline(),end="") except IOError as err:     #输出异常信息     print("异常信息:"+ str(err)) #str()转换为字符串 finally:     #不管是否发生异常一定

python学习笔记异常处理(七)

异常处理 异常处理是工作中编写代码必须要完成的内容,对于不符合预期的操作,程序总会出现异常情况,而对异常情况能够妥善处理,是保证程序稳定性的关键. >> f = input("filename")filename/hone/a.py>> ff = open(f)Traceback (most recent call last):File "<stdin>", line 1, in <module>FileNotFoun

python笔记 - day8

python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/articles/5017742.html 大纲 面向对象三大特性之多态 类成员之静态字段和普通字段 类成员之普通方法和静态方法以及类方法 类成员之属性 类成员之成员修饰符 类成员之特殊成员 其他之isinstance和issubclass 其他之super的应用 实例之自定义有序字典 单例模式 基本异常

Python笔记_01列表 和元祖

Python笔记 第一章 列表和元祖 1.通用序列操作 所有序列都可以进行某些特定操作,包括:索引(indexing).分片(slicing).加(adding).乘(multiplying)以及检查某元素是否属于列表成员. 迭代:依次对序列中的每个元素重复执行某些操作. 序列的索引:通过元素在列表中的位置可以定位到该元素,这就是列表的索引,使用类似于list[0]对元素进行索引,索引0指向第一个元素.也可使用负数对元素进行索引,使用负数对元素索引时,列表中的最后一个元素由-1表示,例如list

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

Python笔记(四)

在<Python笔记(三)>中,我记录关于Python中序列问题的知识.个人觉得确实比Java中的集合框架简单.之前也说了,Python是一种高级面向对象的语言,它的每一个变量都称为对象.今天我接触了面向对象的编程.下面是这篇博客的目录: 1.类与对象 2.输入输出 3.异常 类与对象: 我们都知道面向对象的语言具备四个特性:抽象,继承,封装,多态.Java,C++是这样,Python也不例外.在Python中,我们定义一个类,使用关键字class.形式如下:class classname:.

python笔记 - day7-1 之面向对象编程

python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: sele是什么? self是一个python自动会给传值得参数: 哪个对象执行方法,self就是哪个对象: 构造方法: 类中有一个特殊的方法,__init__,类()自动执行: 面向对象,三大特性: 封装,继承,多态:  

Python笔记之不可不练

如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知>中,尽管本文是自己学习Python过程中的总结,在大神看来,或许略欠火候,希望批评指正,万分感谢! 本文是作者学习成绩的见证,请尊重劳动成果!版权归作者和博客园共有,欢迎转载,但请保留本文出处http://www.cnblogs.com/itred/p/4687287.html ,  作者:itRed

python笔记之列表和元组

pyhton的列表和元组,说白了其实就是一种数据结构,只是在python当中更加方便的去操作而已.. 1.序列 其实字符串就是采取序列的方式的: string = "hello" print string[0] 结果为:h 对比其他编程语言,python还有一个负值索引的概念: 序列的分片: first = [0,1,2,3,4,5,6,7,9] print first[1:6:2] 针对first[1:6:2]这条语句: 1代表的起始索引,不写,默认为0 6代表结束索引,不写默认为所