异常处理:
在代码运行、使用中,遇到一些特殊情况,异常:就是非正常情况
异常并不是错误,而是因为特殊原因,例如,用户使用错误、网络
异常一旦出现程序会立刻结束掉。
异常处理的方案:
在软件运行的时候,不可避免地会出现一些非正常情况,但是这些情况并不影响后面软件的运行;
为了维护软件的稳定性---异常处理
python中异常处理:
很简单,抓取异常
将有可能出现异常的代码块可以放在一个try语句块中,一旦出现异常,我们就针对异常做出处理;
不管处不处理异常,代码不错抛,而是会继续向下运行。
try:
#可能出现异常的代码块
#可能出现异常的代码块
except:
#处理异常
1、try语句块如果没有抓取到异常,不会进入到except语句块
2、如果说在try语句块中代码出现异常,代码就不会正常向下执行,也没有直接结束,而是立刻进入到except语句块中,进行异常处理,处理完成后,代码正常向下走
3、异常处理的作用:
|-- 解决错误 except里面处理
|-- 保证代码的健壮性和稳定性、容错性
#此时因为如下代码可能会出现异常,try
try:
print("异常之前")
num = int(input("请输入一个整数:"))
if num >= 18:
print("你成年了")
else:
print("你未成年")
except ValueError as e:
print("出现异常,处理异常,异常信息为--->",e)
except FileNotFoundError:
print("对不起,文件不存在")
#这个是多态的体现
except Exception:
print("出现了其他异常")
finally:
print("不要犯错噢")
异常处理时,我们也可以针对特定的异常处理:
try:
#可能出现异常的代码块 #AssertionError
#可能出现异常的代码块 #ValueError
#可能出现异常的代码块 #FileNotExists
except 特定的异常:
#处理异常
except ValueError :
#处理ValueError
except BaseException:
#使用多态对剩余异常一次处理
异常类的继承关系:
普通异常,继承Exception类,Exception继承BaseException类
finally关键字
try:
#可能出现异常的代码块
except xxException as e:
#处理xxException异常的代码
except BaseException as e:
#处理剩余异常的代码
finally:
#一定会执行的代码!!!
#try中的代码不管出不出现异常,finally必须执行
#资源的释放、垃圾的回收等等必须执行的代码
#如果在编程中见到如下的语句块
#目的就是利用finally,必须执行
try:
#代码
finally:
#把必须执行的代码写在这
自定义异常:
不仅仅有系统提供的异常,也可以由程序员来自己定义异常
步骤如下:
定义一个类
让这个类继承Exception或者BaseException类
重构初始化方法
人为的抛出异常:
使用关键字raise
人为的抛出异常的目的:向上(调用者)传递信息
class MyException(Exception):
def __init__(self,msg):
Exception().__init__(msg)
def fn():
print("1")
print("2")
#我需要人为的抛出异常
raise MyException("出错了")
print("3")
try:
fn()
except MyException as e:
print(e)
print("----over----")