常用异常: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
异常处理: try: 可能发生异常的代码 except error1,error2… as e: 捕捉指定的一个或者多个错误,多个需要用括号括起来 这里可以自定义输出发生错误时的提示信息 except Exception as e: 这个可以捕获所有的错误类型,一般不建议在开头用 这里可以自定义输出发生错误时的提示信息 else: 一切正常时执行 finally: 无论是否有错都执行
异常处理Demo:
#!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi array=['carsonHai','BertLi'] list={'age':25,'name':'BertLi'} str='Hello World!' try: int(str) print(array[3]) print(list['sex']) open("CarsonHai") except IndexError as e: print("列表下标越界", e) except KeyError as e: print("字典不存在这个key", e) except ValueError as e: print("值的类型错误", e) except Exception as e: print("未知异常:",e) else: print("一切正常时执行") finally: print("无论是否有错都执行")
执行结果:
值的类型错误 invalid literal for int() with base 10: 'Hello World!' 无论是否有错都执行
自定义异常:
#!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi class BertError(Exception): def __init__(self,message): self.message=message def __str__(self): '''此方法不写时,默认返回message,也可自定义返回内容''' return self.message #"自定义异常" try: raise BertError("Bert异常") except BertError as e: print("自定义异常:",e) 执行结果: 自定义异常: Bert异常