目录
2)、BaseException:所有异常的基类。通常不应该直接捕获这个类的实例,除非你确实打算捕获所有异常。
3)、SyntaxError:Python语法错误,比如拼写错误或不正确的语句结构。
5)、IndexError:索引超出序列(如列表、元组)范围时引发。
7)、ValueError:传给函数的参数具有正确的类型,但却是无效的值时引发。例如,int('abc')会引发ValueError。
8)、TypeError:操作或函数应用于不适当类型的对象时引发。例如,对整数进行拼接操作1 + "string"会引发TypeError。
10)、FileNotFoundError:尝试打开不存在的文件时引发。
11)、IOError(Python 2中)/ OSError(Python 3中):输入/输出操作失败时引发,如文件不存在、权限问题等。
12)、AttributeError:尝试访问对象不存在的属性时引发。
14)、KeyboardInterrupt:用户中断执行(通常是通过Ctrl+C)时引发。
15)、StopIteration:迭代器没有更多的项目时引发,通常在for循环中自动处理。
16)、RuntimeError:一般性的运行时错误,不归类于其他异常类时使用。
17)、NotImplementedError:抽象方法需要在子类中实现但没有实现时引发。
18)、AssertionError:当assert语句失败时引发。
在Python中,异常处理是通过try...except...语句来实现的,这是一种结构化的方式来处理程序运行过程中可能出现的错误情况,保证程序的健壮性和连续运行。
1、基础结构
基本的异常处理结构包括try块、一个或多个except块,以及可选的else和finally块。
try:
# 尝试执行的代码
...
except ExceptionType1:
# 处理特定类型的异常
...
except (ExceptionType2, ExceptionType3):
# 处理多种异常类型
...
else:
# 如果没有异常发生,执行这里的代码
...
finally:
# 不管是否发生异常,都会执行这里的代码
...
2、try块
- 作用:包含可能引发异常的代码。
- 说明:当Python遇到一个错误时,它会停止当前块的执行,并寻找相应的
except块。
3、except块
- 作用:捕获并处理特定类型的异常。
- 语法:可以指定一个或多个
except块来捕获不同类型的异常。如果未指定异常类型,默认捕获所有异常。 - 参数:可以访问异常对象,通过
as关键字命名,如except Exception as e。
4、else块
- 作用:如果没有异常发生,执行这里的代码。
- 特点:它是可选的,仅当
try块中的所有代码执行完毕且未引发异常时执行。
5、finally块
- 作用:无论是否发生异常,都会执行这里的代码。
- 用途:非常适合放置清理资源的代码,如关闭文件或数据库连接。
6、自定义异常
Python允许你定义自己的异常类,继承自内置的Exception类或其子类。
class MyCustomError(Exception):
def __init__(self, message):
super().__init__(message)
7、抛出异常
使用raise语句主动抛出异常。
if some_condition:
raise MyCustomError("Something went wrong!")
8、常用的内置异常类型
1)、Exception:捕捉所有异常。
Exception是大多数内建异常的基类(不包括SystemExit, KeyboardInterrupt, GeneratorExit等系统退出异常),所以它可以捕获除了系统退出异常之外的所有异常。
try:
a = 1/0
except Exception as e:
print(f"Caught an error: {e}")
2)、BaseException:所有异常的基类。通常不应该直接捕获这个类的实例,除非你确实打算捕获所有异常。
try:
a = 1/0
except BaseException as b:
print(f"Caught an error: {b}")
3)、SyntaxError:Python语法错误,比如拼写错误或不正确的语句结构。
SyntaxError通常是在编译代码时由Python解释器抛出的,而不是在运行时。这意味着不能在一个常规的try-except块中直接捕获SyntaxError,因为try块中的代码在尝试捕获异常之前就已经被编译了。
然而,如果想要模拟处理SyntaxError的情况,可以考虑使用exec函数来动态执行字符串形式的代码,这样就可以在try-except块中捕获由这些代码引发的SyntaxError。以下是一个例子:
try:
# 使用exec来动态执行字符串形式的代码
exec("if 5 > 3 \nprint('5 is greater than 3')") # 注意这里故意缺少了冒号
except SyntaxError as e:
# 捕获SyntaxError并打印错误信息
print("Caught a SyntaxError:", e)
# 正确的代码直接运行
if 5 > 3:
print("5 is greater than 3")
4)、ImportError:尝试导入模块或包失败时引发。
try:
import non_existent_module # 尝试导入一个不存在的模块
except ImportError as e:
print(f"无法导入模块: {e}")
# 这里可以添加其他错误处理逻辑,比如使用备选方案、记录日志等
5)、IndexError:索引超出序列(如列表、元组)范围时引发。
my_list = [1, 2, 3]
try:
# 尝试访问一个不存在的索引,比如列表长度之外的位置
print(my_list[3])
except IndexError as e:
print("尝试访问的索引超出范围:", e)
6)、KeyError:尝试访问字典中不存在的键时引发。
my_dict = {'name': 'Alice', 'age': 30}
try:
# 尝试访问一个不存在的键
print(my_dict['country']

本文详细介绍了Python中的异常处理结构,包括try、except、else和finally块,列举了常见的内置异常类型,并通过实例展示了如何处理文件操作、数学运算、网络请求等问题,帮助开发者写出更健壮的代码。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=138951404&d=1&t=3&u=5e502ce06ff8407b8342ba585b43937f)
6218

被折叠的 条评论
为什么被折叠?



