1、异常处理
1.1、什么是异常
异常是错误发生的信号,一旦程序出错就会产生一个异常
如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止
异常是由三部分组成
1、具体哪一行代码抛出的异常
2、异常的种类
NameError: 变量名没有定义过
IndexError: 索引不存在
KeyError: 字典的key不存在
AttributeError: 对象属性不存在
ValueError: 值错误,比如类型转换int('abc')
TypeError: 类型错误,比如字符串+整型
ZeroDivisionError: 比如1/0
...
3、异常的内容信息
1.2、为何要处理异常
为了增强程序的健壮性
1.3、如何处理异常
1、针对语法错误: 应该在程序运行前立即改正
2、针对逻辑错误:
(1) 如果逻辑错误发生的条件是可以预知的,应该用if判断解决,预防异常
(2) 如果逻辑错误发生的条件是不可预知的,那么异常一定会发生,考虑到程序的健壮性,我们应该处理异常,做好补救措施
try:
代码块
except 异常的类型:
发生异常后要执行的代码
1.4、异常注意点
try:
print(aaa)
except ValueError as e:
print(e)
msg = 'abc'
try:
int(msg)
except KeyError as e:
print(e)
except IndexError as e:
print(e)
except ValueError as e:
print(e)
except NameError as e:
print(e)
msg = 'abc'
try:
int(msg)
except Exception as e:
print(e)
msg = 'abc'
try:
int(msg)
except KeyError as e:
print(e)
except IndexError as e:
print(e)
except NameError as e:
print(e)
except Exception as e:
print(e)
msg = '123'
try:
int(msg)
except KeyError as e:
print(e)
except IndexError as e:
print(e)
except NameError as e:
print(e)
except Exception as e:
print(e)
else:
print('try内代码块没有异常的时候我就执行了')
finally:
print('无论如何我都会执行')
print(111)
raise NameError('报错了')
print(222)
class MyException(BaseException):
def __init__(self, msg, x, y, z):
self.msg = msg
self.x = x
self.y = y
self.z = z
def __str__(self):
return '<{}:{}:{}:{}>'.format(self.msg, self.x, self.y, self.z)
raise MyException('自定义异常', 10, 11, 12)
assert 1 == 1
assert 1 == 2
assert len([1, 2, 3]) == 2
1.5、异常总结(try…except…)
1、把错误处理和真正的工作分开来
2、代码更易组织,更清晰,复杂的工作任务更容易实现
3、更安全了,不至于由于一些小的疏忽而使程序意外崩溃