一、常见的异常
调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正;另一方面,有些异常是不可避免的,但我们可以对异常进行捕获处理,防止程序终止。
异常 | 含义 |
---|---|
Exception | 所有异常的基类 |
AttributeError | 特征引用或者赋值失败时引发的 |
IOError | 输入/输出操作失败,试图打在不存在的文件(包括其他情况) |
IndexError | 使用序列中不存在的索引 |
KeyError | 使用映射中不存在的键 |
NameError | 找不到名字(变量 ) |
SyntaxError | 在代码为错误形式时引发 |
ValueError | 正确的类型对象,但是对象使用不合适的值 |
UnboundLocalError | 访问未初始化的本地变量 |
TypeError | 传入对象类型与要求的不符合 |
AttributeError | 对象没有这个属性 |
IndentationError | 缩进错误 |
TabError Tab | 和空格混用 |
ValueError | 传入无效的参数 |
SystemError | 一般的解释器系统错误 |
二、异常处理机制
1.捕捉异常
try:
print(name)
# python中几乎所有的异常都可以通过 Exception捕获,并进一步处理
except Exception as e:
print("出现异常时执行的内容")
print(e) # 打印异常的原因
name = 'westos'
print(name)
else:
print("没有出现异常时执行的内容")
finally:
print("不管是否出现异常,总会执行的内容")
注意 except Exception as e 的写法,e 是一个变量,记录了异常的类,可以用 print 函数打印出来
2.捕获多个异常
try:
需要执行的操作
except Exception as e:
如果发生异常,执行以下代码
except Exception as f:
如果发生异常,执行以下代码
else:
如果没有发生异常,执行的命令
finally:
无论如何,都要执行的代码
如果需要明确指定异常的类,而且是多个类的情况下,可以使用多个 except 语句。
try:
需要执行的操作
except (异常类1,异常2,异常3) as e:
如果发生异常,执行以下代码
else:
如果没有发生异常,执行的命令
finally:
无论如何,都要执行的代码
三、 抛出异常
异常处理就是掩盖错误,抛出异常是没事找事,找茬。
代码:
class AgeError(Exception):
pass
age = int(input("Age:"))
if 0<age<=150:
print(age)
else:
# 抛出异常
raise AgeError("年龄不合法")
测试:
四、异常的种类
Exception 异常的父类,可以捕获多个子类
在requests模块中常见的异常:
在requests.exceptions方法下查看
requests.exceptions ConnectionError #未知的服务器
requests.exceptions ConnectTimeout #连接\读取超时
requests.exceptions ProxyError #代理连接不上