107.捕获异常

捕获异常

在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 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")
原文地址:https://www.cnblogs.com/kangwenju/p/12881693.html