异常处理
异常模板
try: pass except Exception as e: # Exception能捕获所有异常,语法错误、缩进错误无法抓取,都没有执行下来 print("出现异常:",e)
else:
print("一切正常") # 不出错时执行(可不写)
finally:
pass # 无论是否异常,最终都会执行(可不写)
常用的异常种类
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译 TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
主动触发异常
try: raise Exception("错误了...") # 抛出异常(Exception可改为自定义的异常) except Exception as e: print(e)
断言
assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下: assert expression [, arguments] assert 表达式 [, 参数] assert len(lists) >=5,'列表元素个数小于5' assert 2==1,'2不等于1'