捕获异常
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试)
来 捕获异常。
简单的捕获异常语法
语法格式:
try: 尝试执行的代码 except: 出现错误的处理
try
尝试下方编写要尝试代码,不确定是否能够正常执行的代码
except
如果不是,下方编写尝试失败的代码
需求:用户输入整数
分支判断方式:
# 引导用户输入一个数字 num = input("请输入数字:") if not num.isdigit(): print("请输入正确的数字")
捕获异常方式:
try: # 引导用户输入一个数字 num = int(input("请输入数字:")) except: print("请输入正确的数字")
捕获异常类型
捕获单个异常类型
在程序执行时,可能会遇到一种类型的异常,并且要对这种类型的异常,做出对应的响应,这个时候,就需要对该类型进行捕获异常了。
语法格式:
try: 尝试执行的代码 except 异常类型: 出现错误的处理
try
尝试下方编写要尝试代码,不确定是否能够正常执行的代码
except
如果不是对应异常类型,下方编写尝试失败的代码
捕获多个异常类型
在程序执行时,可能会遇到多种种类型的异常,并且要对多种类型的异常,做出相同的响应,这个时候,就需要对多种类型进行捕获异常了。
语法格式:
try: 尝试执行的代码 except (异常类型1, 异常类型2, ...): 出现错误的处理
try
尝试下方编写要尝试代码,不确定是否能够正常执行的代码
except
如果不是对应多个异常类型,下方编写尝试失败的代码
在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要对多种类型分别进行捕获异常类型了。
语法格式:
try: # 尝试执行的代码1(可能会发送错误类型1异常) # 尝试执行的代码2(可能会发送错误类型2异常) # 尝试执行的代码3(可能会发送错误类型3异常) except 错误类型1: # 针对错误类型1,对应的代码处理 except (错误类型2, 错误类型3): # 针对错误类型2 和 3,对应的代码处理
需求:
1.提示用户输入一个整数
2.使用10除以用户输入的整数并且输出
try: num = int(input("请输入整数:")) ret = 10 / num print(ret) except ValueError: print("请输入正确的整数") except ZeroDivisionError: print("0不能作为除数")
捕获未知类型异常
在开发时,要预判到所有可能出现的错误,还是有一定难度的,如果希望程序无论出现任何错误,都不会因为 Python解释器抛出异常而被终止,可以再增加一个except。
语法格式:
try: 尝试执行的代码 except Exception: 出现错误的处理 # 或者 try: 尝试执行的代码 except: 出现错误的处理
获取异常的信息描述
# 例如示例异常: NameError: name 'num' is not defined # NameError -> 异常类型 # name 'num' is not defined -> 异常的信息描述
语法格式:
try: # 尝试执行的代码1(可能会发送错误类型1异常) # 尝试执行的代码2(可能会发送错误类型2异常) # 尝试执行的代码3(可能会发送错误类型3异常) except 错误类型1 as e: # 针对错误类型1,对应的代码处理 # 变量e保存的是异常的信息描述 except (错误类型2, 错误类型3) as e: # 针对错误类型2 和 3,对应的代码处理 # 变量e保存的是异常的信息描述 except Exception as e: # 针对未知错误,对应的代码处理 # 变量e保存的是异常的信息描述
异常捕获完整语法
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下。
语法格式:
try: # 尝试执行的代码 except 错误类型1: # 针对错误类型1,对应的代码处理 except 错误类型2: # 针对错误类型2,对应的代码处理 except (错误类型3, 错误类型4): # 针对错误类型3 和 4,对应的代码处理 except Exception as e: # 针对未知错误,对应的代码处理 # 变量e保存的是异常的信息描述 else: # 只有在没有异常时才会执行的代码 finally: # 无论是否有异常,都会执行的代码
例子:
捕获异常:
# FileNotFoundError: [Errno 2] No such file or directory: 'hm.txt' # FileNotFoundError 异常类型 # [Errno 2] No such file or directory: 'hm.txt' 异常的信息描述 # try: # f = open("hm.txt", "r") # except: # print("如果发生异常 进行捕获完成后 将要做的事情") # 分支判断 # num = input("请输入一个数字:") # if not num.isdigit(): # print("请正确的输入一个数字") # 捕获异常 try: num = int(input("请输入一个数字:")) except: print("请正确的输入一个数字")
例子2:
捕获异常类型:
# 捕获单个异常类型 """ try: 执行可能会发生异常的代码 except 异常类型: 如果发生异常 捕获成功后做的事情 """ # try: # a = 10 / 0 # except ZeroDivisionError: # print("0不能做除数...") # 捕获多个异常类型 # try: # print(num) # a = 10 / 0 # except ZeroDivisionError: # print("0不能做除数...") # except NameError: # print("变量名不存在...") # try: # print(num) # a = 10 / 0 # except (ZeroDivisionError, NameError): # print("无论谁发生异常 做的事情均一样") # 捕获未知类型异常 # try: # open("hm.txt", "r") # except Exception: # print("捕获到了异常")
例子3:
获取异常的信息描述:
# 定义了一个变量保存异常的信息描述 # 捕获单个类型异常 # try: # print(num) # except NameError as e: # print(e) # 捕获多个异常类型 # try: # # print(num) # a = 10 / 0 # except (NameError, ZeroDivisionError) as e: # print(e) # 捕获未知的异常类型 # try: # open("hm.txt", "r") # except: # print("捕获到了异常") #等价 try: open("hm.txt", "r") except Exception as e: print("捕获到了异常", e)
例子4:
捕获异常的完整语法:
# 捕获异常 try: # num = 10 print(num) except: # 如果try执行的代码发生异常 将执行except中的代码 print("except") else: # 如果try执行的代码 没有发生异常 将执行else中的代码 print("else") finally: # 如果try执行的代码 无论发生异常与否 都会执行finally的代码 print("finally")