python笔记十:异常

一.异常

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引发的异常,推荐使用自定义异常(方便扩展)
  • 自定义异常一般包含以下内容:自定义发生异常的异常代码、自定义发生异常后的问题提示、自定义发生异常的行数
  • 最终目的是一旦发生异常能快速定位到错误现场

视频参考极客学院

猜你喜欢

转载自blog.csdn.net/qq_41518266/article/details/87936444