Python异常处理
1、异常概述
(1)异常:Python用异常对象来表示异常情况,遇到错误后,会引发异常,如果异常对象未被处理捕捉,程序就会用所谓的回溯终止执行
(2)异常处理:程序出现bug时不将错误信息显示给用户,而是现实一个提示的页面
2、常见python 异常:
(1)AttributeError:试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
(2)IOError:输入/输出异常;基本上是无法打开文件
(3)ImportError:无法引入模块或包;基本上是路径问题或名称错误
(4)IndentationError:语法错误(的子类) ;代码没有正确对齐
(5)IndexError:下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
(6)KeyError:试图访问字典里不存在的键
(7)KeyboardInterrupt:Ctrl+C被按下
(8)NameError:使用一个还未被赋予对象的变量
(9)SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
(10)TypeError:传入对象类型与要求的不符合
(11)UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
(12)ValueError:传入一个调用者不期望的值,即使值的类型是正确的
3、 抓取异常
try: name = "dayi123" age = int(name) except Exception as e: #抓取所有的异常,并将异常错误信息赋值给e print("error:") print(e)
4、根据异常错误抓取异常
#IO错误 try: with open('dayi123.txt','r') as f: print(f.read()) except IOError: #文件不存在时会执行下面语句 print("no file ")#下标错误 try: name = ["dayi","xiaowang","xiaoli"] name[4] except IndexError as e: #如果访问列表中的元素不存在,则报下面错误 print("下标错误")
5、同时抓取多个异常
try: name = ["dayi","xiaowang","xiaoli"] name[2] info_dict = {'name':"dayi",'age':18,'job':"it"} info_dict["mail"] #访问字典里不存在的key except (IndexError,KeyError) as e: #同时抓取两个错误 print("下标错误或键错误")
6、分类抓取异常
try: #将要抓的异常程序写在try下 name = "dayi" name_list = ['xiaochen','eric','jack'] age = int(name) print(name) print(name_list[4]) except NameError as err: #若果异常关键字为NameError,则执行下面内容 print(err) except IndexError as err: #若果异常关键字为IndexError,则执行下面内容 print(err) print('do sth to make up..........') except Exception as e: #抓取所有的异常并将异常信息赋给e print('---->some error i do not know:',e) else: #如果没有异常,则执行下面内容 print("---no err happend---") finally: #不管有没有异常,都会执行下面内容 print("---no matter has error or not,this willpart all") print('--do sth else---')
7、制作自己的异常
class DayiError(Exception): def __init__(self, msg): self.message = msg # def __str__(self): # return 'sdfsf' try: raise DayiError('数据库连不上') except DayiError as e: print(e)