一.异常
1.异常是指在语法逻辑正确的前提下,出现的问题,异常是不可避免的,错误时可以避免的
2.在python中,异常是一个类,可以处理和使用
3.异常处理:必须保证程序在最坏的情况下出现的问题被妥善处理,使程序出错时不会中断程序,而是接着执行程序
4.python异常处理语句
#除except以外,else和finally都是可选的
try:
尝试实现某个操作,如果没有出现异常任务可以完成
如果出现异常将跳出当前代码,匹配到相应except异常处,尝试解决异常
except 异常类型1:
解决方案1:用于尝试在此处处理异常解决问题
except 异常类型2:
解决方案2:用于尝试在此处处理异常解决问题
except (异常类型1,异常类型2...)
解决方案:针对多个异常使用相同的处理方法
except:
解决方案:所有异常的解决方案
else:
如果没有出现任何异常将会执行此处代码
finally:
无论又没有异常都要执行的代码
- 例子
#多种error时,越具体的错误越往前放
#在异常继承关系中,越是子类的异常,越要往前放
#越是父类的异常,越往后放
try:
num = int(input('请输入数字:'))
rst = 100/num
print('计算结果是:{}'.format(rst))
except ZeroDivisionError as e:#捕获异常并实例化
print('分母不能为0')
print(e)
except NameError as e:
print('名字错了')
print(e)
except AttributeError as e:
print('属性错误')
print(e)
#所有的异常都继承于Exception
#写上下面这句话任何异常都会被拦截住,下面这句话总作为最后一个except
except Exception as e:
print('其他错误')
print(e)
else:
print('没有异常')
finally:
print('总会被执行')
二.用户手动引发异常
1.某些情况用户希望自己引发一个异常时,可以用raise关键字引发异常
- 例子
#raise案例
try:
print('hello')
#手动引发异常,raise后跟异常类名称
raise ValueError
print('*********') #这句将会不被执行
except NameError as e:
print('name error')
except ValueError as e:
print('value error')
except Exception as e:
print('其他异常')
finally:
print('不管有没有异常都会被执行')
2.自己定义异常(手动抛出异常时推荐使用自定义的异常)
- 自定义异常必须是系统异常的子类
#自定义异常案例
#定义LiuError,继承子系统的ValueError
class LiuValueError(ValueError):
pass
try:
print('hello')
#手动引发异常,raise后跟异常类名称
raise LiuValueError
print('*********') #这句将会不被执行
except LiuValueError as e: #如果没有这个except语句,将被ValueError捕获
print('自定义的liu value error')
except ValueError as e:
print('value error')
except Exception as e:
print('其他异常')
finally:
print('不管有没有异常都会被执行')
3.关于自定义异常
- 只要是raise引发的异常,推荐使用自定义异常(方便扩展)
- 自定义异常一般包含以下内容:自定义发生异常的异常代码、自定义发生异常后的问题提示、自定义发生异常的行数
- 最终目的是一旦发生异常能快速定位到错误现场
视频参考极客学院