异常
常用异常:
# 捕获异常 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给给用户,而是实现一个提示的页面,通俗地说就是不让用户看到大黄页 # python中的异常种类非常多,每个异常专门用于处理某一项异常!!! # AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x # IOError 输入/输出异常;基本上是无法打开文件 # ImportError 无法引入模块或包;基本上是路径问题或名称错误 # IndentationError 语法错误(的子类) ;代码没有正确对齐 # IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] # KeyError 试图访问字典里不存在的键 # KeyboardInterrupt Ctrl+C被按下 # NameError 使用一个还未被赋予对象的变量 # SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) # TypeError 传入对象类型与要求的不符合 # UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, # 导致你以为正在访问它 # ValueError 传入一个调用者不期望的值,即使值的类型是正确的
捕获异常:
(# IndentationError和SyntaxError 异常无法捕获)
person=['Mike','Jane'] try: print(person[2]) except IndexError as e: print(e) dict={'':'Mike'} try: print(dict['sn']) except KeyError as e: print(e) except ValueError as e: print(e) except IndexError as e: print(e) except Exception as e: #万能异常:Exception,他可以捕获任意异常 print(e) #对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。 #主动触发异常 try: raise Exception('出错了。。。') except Exception as e: print(e) # 异常其他结构 try: #主代码块 pass except KeyError as e: #出现异常时执行该块 pass else: #主代码块执行完成后执行 pass finally: #无论异常与否,最终执行该块 pass
自定义异常:
class MyError(Exception):#Exception所有异常的基类 def __init__(self,msg): self.msg=msg # def __str__(self): #因为MyError继承Exception,所以不用重构__str__方法也可以 # return self.msg try: raise MyError('我的错误。。。') except MyError as e: print(e)