一、常见的异常类型
1.第一组常见异常
异常名称 | 说明 |
---|---|
Exception | 通用异常类型(基类) |
ZeroDivisionError | 不能整除0 |
AttributeError | 对象没有这个属性 |
IOError | 输入输出操作失败 |
IndexError | 没有当前的索引 |
2.第二组常见异常2
异常名称 | 说明 |
---|---|
KeyError | 没有这个键值(key) |
NameError | 没有这个变量(未初始化对象) |
SyntaxError | python语法错误 |
SystemError | 解释器的系统错误 |
ValueError | 传入的参数错误 |
3.异常捕获的案例
(1)AttributeError
class Test(object):
pass
t = Test()
try:
t.name
except AttributeError as e:
print(e)
运行结果:
(2)KeyError
d = {'naem': 'xy'}
try:
d['age']
except KeyError as e:
print('没有对应的键:', e)
运行结果:
(3)IndexError
l = [1, 2, 3]
try:
l[5]
except IndexError as e:
print(e)
运行结果:
(4)ValueError
name = 'dewei'
try:
int(name)
except ValueError as e:
print(e)
运行结果:
(5)TypeError
def test(a):
return a
try:
test()
except TypeError as e:
print(e)
运行结果:
二、异常中finally
1.基础理论
- 无论是否发生异常,一定会执行的代码块,也就是如果写了finally那就是强制执行的。
- 在函数中,即便try或except中进行了return也依然会执行finally语法块。
- try语法至少要伴随except或finally中的一个。
- 在python2.5之前的版本,finally需要独立使用,不可以和try配合,之后才演变成现在的模式。
try:
<代码块>
except:
<代码块>
finally:
<代码块>
2.案例
函数已经return后依旧会执行finally,再次印证了finally是强制执行的。
def test3():
try:
print('try test 11')
return 'try'
except Exception as e:
print('e')
finally:
print('finally test')
print('------------------')
result = test3()
print(result)
运行结果: