异常
- 广义上的错误分为错误和异常
- 错误指的是认为可以避免
- 异常是指在语法逻辑正确的前提下,出现的问题
- 在python,异常是一个类,可以处理和使用
异常处理
-
保证程序在最坏的情况下得到妥善的解决
-
python 的异常处理模块全部语法为:
try:
尝试实现某个操作,
如果没实现操作,任务就可以完成
如果出现异常,讲一场从当前代码扔出去尝试解决异常except 异常类型1:
解决方案1:用于尝试在此处处理异常解决问题except 异常类型2:
。。。。。except (异常类型1,异常类型2,。。。):
解决方案:针对多个异常使用的处理方式except:
解决方案:所有异常的处理方案else:
如果没有出现异常,将会执行的代码finally:
不论是否异常都会执行的代码 -
除了except(最少一个)以外,else和finally可选
#简单案例
try:
num = int(input("输入一个数:"))
rst = 100/num
print("计算结果是:{0}".format(rst))
#捕获异常以后,把异常实例化,出错信息会在实例里
#以下语句是捕获ZeroDivisionError异常并实例化实例e
#需要把越具体的错误,越往前放
#越是子类的异常,放在前边
#越是父类的异常,越要放在后边
#在处理异常的时候,一旦拦截到某一个异常,就不在往下继续直接往下进行,
except ZeroDivisionError as e:
print("你输入的错误。")
print(e)
exit() #退出程序
#所有异常都是继承自Exception
#如果写上下面这句话,任何异常都会拦截
#而且,下边这句话建议都要写上,而且一定是最后一个。
except Exception as e:
print("错误!")
print(e)
输入一个数:0
你输入的错误。
division by zero
用户手动引发异常
- 当某些情况, 用户希望自己引发一个异常的时候,可以使用
- raise 关键字引发异常
#raise案例
try:
print("i love you ")
print(3.0141563)
#手动引发一个异常
#注意语法:raise ErrorClassName
raise ValueError #自己抛出一个异常,下边的不执行了。
print("aaasss")
except NameError as e:
print("NameError")
except ValueError as e:
print("ValueeError")
except Exception as e:
print("Exception")
finally:
print("bixuzhixing")
i love you
3.0141563
ValueeError
bixuzhixing
#自己定义异常
#需要注意:自定义异常必须是系统异常的子类
class LiziError(ValueError):
pass
try:
print("i love you ")
print(3.0141563)
#手动引发一个异常
#注意语法:raise ErrorClassName
raise LiziError #自己抛出一个异常,下边的不执行了。
print("aaasss")
except NameError as e:
print("NameError")
except LiziError as e:
print("LiziError")
except ValueError as e:
print("ValueeError")
except Exception as e:
print("Exception")
finally:
print("bixuzhixing")
i love you
3.0141563
LiziError
bixuzhixing
#自己定义异常
#需要注意:自定义异常必须是系统异常的子类
class LiziError(ValueError):
pass
try:
print("i love you ")
print(3.0141563)
#手动引发一个异常
#注意语法:raise ErrorClassName
raise LiziError #自己抛出一个异常,下边的不执行了。
print("aaasss")
except NameError as e:
print("NameError")
#如果没有子类的Error就找父类的Error
except ValueError as e:
print("ValueeError")
except Exception as e:
print("Exception")
finally:
print("bixuzhixing")
i love you
3.0141563
ValueeError
bixuzhixing
#else语句案例
try:
num = int(input("输入一个数:"))
a = 100/num
except Exception as e:
print("Exception")
else:
print(" no ")
finally:
print("yyyyy")
输入一个数:0
Exception
yyyyy
关于自定义的异常
- 只要是raise异常, 则推荐自定义异常
- 在自定义异常的时候,一般包含以下内容
- 自定义发生异常的异常代码
- 自定义发生异常的问题提示
- 自定义发生异常的行数
- 最终的目的是,一旦发生异常,方便程序员快速定位异常位置