异常处理
异常处理
-
什么是异常
异常是错误发生的信号
程序一旦出错就会产生一个异常
如果该异常没有被处理,该异常就会抛出来,程序的运行也随即终止
错误分为两种:
1、语法错误 #SyntaxError
SyntaxError: invalid syntax
#语法错误举例
if #直接运行
SyntaxError: invalid syntax #运行后报错 语法错误
2、逻辑错误
# 逻辑错误举例
age = input('>>>:').strip()
age = int(age)
if age>19:
print('too big')
elif age<19:
print('too small')
else:
print('you got it')
##ValueError: invalid literal for int() with base 10: 'sslls'
-
为何要处理异常
不处理程序就会崩溃
-
如何处理异常
语法错误-》程序运行前就必须改正确 这类错误不应该犯!!!!!
逻辑错误-》
针对可控制的逻辑错误,应该直接在代码层面解决
# 针对可控的应该在代码层解决 age = input('>>>:').strip() if age.isdigit(): age = int(age) if age>19: print('too big') elif age<19: print('too small') else: print('you got it') else: print('必须输入数字') #加入if判断来防止报错导致程序崩溃
针对不可控制的逻辑错误应该采用try...except...
-
try...except... 防止不可控制的逻辑错误应该采用的补救措施
try:
被检测的代码块
被检测的代码块
...
except异常的类型1 as 变量名:
针对异常类型1的处理代码 补救代码
except异常的类型2 as 变量名:
针对异常类型2的处理代码 补救代码
...
except Exception:
针对除了以上异常之外所有的异常 的处理代码 补救代码
else:
没有发生异常时要执行的代码
finally:
无论异常是否,都会执行该代码,通常用来进行回收资源的操作
try: 被检测的代码块 except 异常的类型1 as 变量名: 异常处理的代码 补救 except 异常的类型2 as 变量名: 异常处理的代码 补救 except 异常的类型3 as 变量名: 异常处理的代码 补救 except 异常的类型4,5,6 as 变量名: 异常处理的代码 补救 except Exception: 处理异常的代码 补救 else: 没有发生异常时要执行的代码 finally: 无论异常是否,都会执行该代码,通常用来进行回收资源的操作
-
异常处理
为了保证程序的容错性和可靠性,即在遇到错误时有相应的处理机制不会任由程序崩溃,我们需要对异常进行处理,处理的基本形式为刚刚上面所说的 try...except...
举例
try : print('start....') print(x) print('end...') except NameError as e: #as 语法将异常类型的值赋值给变量e print('异常值为:%s' %e) print('run other code...') >>> start.... 异常值为:name 'x' is not defined run other code...
本来程序一旦出现异常就整体结束掉了,有了遗产给处理以后,在被检测的代码块出现异常时,被检测的代码块中异常发生位置之后的代码将不会执行,取而代之的是执行匹配异常的except子代码块,其余代码均正常运行。
当被检测的代码块中有可能触发不同类型的异常时,针对不同类型的异常:
如果我们想分别用不同的逻辑处理,需要用到多分支的except(类似于多分枝的elif,从上到下依次匹配,匹配成功一次便不再匹配其他)
try 可以和except
也可以和 finally
而else必须有except时候才能有
断言
# 断言
# 测试代码时候用
l = [111,222,333]
if len(l):
raise Exception('必须达到三个值')
print('后续代码?、、')
raise