python3 异常处理
1.错误:
(1)语法错误:在解释器中如果不把python语法修正好,则不能run
(2)逻辑错误
2.异常是由程序的错误引起的,语法上面的错误跟异常无关,必须在程序执行前修正。
异常:在运行代码过程中遇到的任何错误,带有error字样的,都是异常;
异常处理:我们在对代码中所有可能会出现的异常,进行的处理;
异常处理情况:
(1)可预知:
1 a=input("》》》》》》:")
2 b=input("》》》》》》:")
3 while True:
4 if a.isdigit() and b.isdigit():
5 if b=="0":
6 print("我要终止了哈")
7 break####终止了
8 else:
9 print(int(a)/int(b))#b不等于0就死循环了
10
11
12 ######################
13 》》》》》》:90
14 》》》》》》:0
15 我要终止了哈
(2)不可预知,则使用try。。。。。。except。。
1 a=input("》》》》》》:")
2 b=input("》》》》》》:")
3 try:
4 print(int(a)/int(b))
5 except ZeroDivisionError as e :
6 print(e)
7
8 ######################
9 》》》》》》:90
10 》》》》》》:0
11 division by zero
3.什么时候用异常处理:
只有在某些无法预知的情况下才使用,但是应该尽量避免使用,多了会导致程序的可读性变差。
4.多分支异常:
1 s1 = "h"
2 try:
3 a=int(s1)
4 except IndexError as e:
5 print(e)
6 except KeyError as e:
7 print(e)
8 except ValueError as e:
9 print(e)
10
11
12 ########################
13 invalid literal for int() with base 10: 'h'
5.万能异常:
1 s1 = "h"
2 try:
3 a=int(s1)
4 except Exception as e:
5 print(e)
6
7
8 ####################
9 invalid literal for int() with base 10: 'h'
6.异常捕获完整语法:
try: # 尝试执行的代码 pass except 错误类型1: # 针对错误类型1,对应的代码处理 pass except 错误类型2: # 针对错误类型2,对应的代码处理 pass except (错误类型3, 错误类型4): # 针对错误类型3 和 4,对应的代码处理 pass except Exception as result: # 打印错误信息 print(result) else: # 没有异常才会执行的代码 pass finally: # 无论是否有异常,都会执行的代码 print("无论是否有异常,都会执行的代码")——————————————————————最后一步是都会执行的
try。。。。。。。。else和if。。。。。。。。。。else是没有任何关系的。
else只有在try中代码块没有异常的时候才会执行的代码;实际上大部分语言的异常处理都没有 else 块,它们确实是将 else 块的代码直接放在 try 块的代码的后面的,因为对于大部分场景而言,直接将 else 块的代码放在 try 块的代码的后面即可。
finally无论是是否有异常,都会被执行的代码。不管 try 块中的代码是否出现异常,也不管哪一个 except 块被执行,甚至在 try 块或 except 块中执行了 return 语句,finally 块总会被执行。
7.异常的传递
异常的传递——当函数/方法出现异常,会将异常传递给函数/方法的调用一方;
当主程序中没有对异常进行处理,才会报错。
def A(): return int(input("请输入一个整数:")) def B(): return A() #利用异常的传递性,在主程序中捕获异常 try: print(B()) except Exception as e: print(e) ################### 请输入一个整数:dcg invalid literal for int() with base 10: 'dcg'
8.主动抛出异常(抛出raise异常)
根据应用程序特有的业务需要上面主动跑出异常;
(比如输入密码大于6小于10,如果密码长度小于6大于1哦则跑出异常。)
- 创建 一个
Exception的 对象 - 使用
raise关键字 抛出 异常对象
__author__ = 'Administrator' def input_pwd(): # 1.提示用户输入密码 pwd=input("请输入您的密码:") # 2.判断密码长度,返回用户输入的面 if 6<=len(pwd)<=8: return pwd else: # 3.如果<8主动抛出异常 print("主动抛出异常") # 创建异常对象 ex=Exception("密码规则错误,请重新输入") # 主动抛出异常 raise ex print(input_pwd()) ########################### 请输入您的密码:1234 Traceback (most recent call last): File "E:/Python/_demo/密码异常/密码异常.py", line 15, in <module> print(input_pwd()) File "E:/Python/_demo/密码异常/密码异常.py", line 14, in input_pwd raise ex Exception: 密码规则错误,请重新输入 主动抛出异常


浙公网安备 33010602011771号