目录
一、try-expect
try-expect 结构是 Python 中用于异常处理的关键机制。它允许你捕获并处理代码中可能发生的异常,从而避免程序崩溃,并提供更友好的错误提示或恢复机制。
基本语法:
"""
try 块:包含可能引发异常的代码。
except 块:捕获并处理特定类型的异常。
as:将异常对象赋值给一个变量,便于进一步处理。
"""
try:
pass # 可能出现错误的代码
except 异常类型 as 异常对象:
pass # 处理异常的代码
1. 多个try-expect结构的使用
1.1 捕捉特定异常
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print("结果是:", result)
except ValueError: # 值错误
print("输入的不是整数!")
except ZeroDivisionError: # 除数为0的错误
print("除数不能为零!")
输出结果:分别是捕捉两种不同错误下的输出情况
请输入一个整数: 5.6
输入的不是整数!
请输入一个整数: 0
除数不能为零!
1.2 捕捉全部异常
使用expect Exception 可以捕获所有异常(不推荐,除非你知道自己在做什么)。
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print("结果是:", result)
except Exception as e:
print(f"发生错误: {e}")
不管是哪种错误,最后都会输出:"发生错误"
请输入一个整数: 5.6
发生错误
1.3 所有异常合并处理
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print("结果是:", result)
except (ValueError, ZeroDivisionError) as e:
print(f"发生错误: {e}")
输出结果:
请输入一个整数: 4.5
发生错误: invalid literal for int() with base 10: '4.5'
2. try-except-else-finally 结构
如果 try 块中的代码没有引发异常,则执行 else 块。
无论是否发生异常,finally 块中的代码都会执行。通常用于释放资源(如关闭文件、断开网络连接等)。
try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("文件未找到!")
finally:
print("文件已关闭。")
输出结果:在这里说明发生异常的输出情况
文件未找到!
文件已关闭。
二、raise 关键字
在Python编程中,raise语句用于手动引发异常,这是处理错误和控制程序流程的常用方法。raise可以单独使用,也可以与异常类名和描述信息一起使用,以提供更具体的错误信息。通过try-except结构,可以捕获并处理手动引发的异常,确保程序的正常执行。
基本语法:
raise [exceptionName [(reason)]]
"""
这里,exceptionName是要引发的异常类的名称,reason是对异常的描述信息。如果省略reason,则在引发异常时不会附带任何异常描述信息。如果完全省略可选参数,则raise会引发当前上下文中捕获的异常,或默认引发RuntimeError异常。
"""
try:
gender=input('请输入你的性别:')
if gender!='男' or gender!='女':
raise ValueError('性别只能是男或女') # raise 主动引发异常,在这里指定的异常是Exception
except ValueError as e:
print(e)
# 这里错误类型要使用已定义的异常类型
输出结果:
请输入你的性别:gou
性别只能是男或女
三、异常类型的产生
"""
(1)ZeroDivisionError 除数为0的错误 division n.除法
print(10/0)
(2)IndexError 索引错误
lst=[10,20,30,40]
print(lst[4]) 序列里总共4个元素,索引是0,1,2,3
(3)KeyError 字典取值时出现的问题
d={'name':'zj','age':20}
print(d['gender']) 要输出字典中key为'gender'对应的值,不存在
(4)NameError
print(hello) 输出一个没加引号的字符串时,会认为它是一个被定义的变量,上文不定义,就会出错
(5)SyntaxError Python语法错误
print('hello) 只加了一个引号
(6)ValueError 值传入异常
print(int('a')) int()是将一个变量转为整形,在这里传入的'a'未经过定义,所以传入的是一个字符串,不符合要求
(7)AttributeError 属性或方法不存在的异常 attribute n.属性;特征;性质;定语
i=10
print(i.name) i是一个变量,没有name这个方法
(8)TypeError
print('hello'+123) 用+连接字符串,不能连接整数
(9)IndentationError 缩进异常
print('hello')
"""
若有错误,敬请批评指正