❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
文章目录
- 一、异常是什么?
- 二、异常处理的基本语法
- 三、捕获特定的异常类型
- 四、finally语句
- 五、自定义异常
- 六、assert语句
- 七、Python内置异常
- 八、总结
- 系列文章
- 热门专栏
大家好,我是水滴~~
Python是一种易学易用的编程语言,但即使是经验丰富的开发人员也会偶尔遇到错误和异常。在这篇教程中,我们将深入讨论Python中的异常处理。
一、异常是什么?
在Python中,当发生错误或意外情况时,会引发异常。异常是Python中的一种错误处理机制,它允许程序员捕获和处理错误,以避免程序崩溃。
Python中的异常通常是由错误的语法或运行时错误引起的,例如:
-
语法错误(
Syntax Error
):在编写代码时,违反了Python语法规则。 -
运行时错误(
Runtime Error
):这是在程序运行时发生的错误,例如尝试使用未定义的变量或调用不存在的函数等。
二、异常处理的基本语法
在Python中,我们可以使用try
和except
语句来捕获和处理异常。try
语句用于包含可能引发异常的代码块,而except
语句用于定义处理异常的代码块。
以下是try
和except
语句的基本语法:
try:
# 可能引发异常的代码
except:
# 处理异常的代码
在上面的代码中,当try
语句块中的代码引发异常时,控制将转移到except
语句块中的代码,以处理异常。
三、捕获特定的异常类型
在实际编程中,我们通常只想捕获特定的异常类型。这可以通过指定一个或多个异常类型来实现。
以下是一个示例,演示如何捕获指定的异常类型:
try:
# 可能引发异常的代码
x = 10 / 0
except ZeroDivisionError:
# 处理除以零的异常
print("除以零错误")
except:
# 处理所有其他异常
print("发生了一个错误")
在上面的示例中,我们使用了两个except
语句。第一个except
语句捕获ZeroDivisionError
异常,这是由于除以零引起的异常。第二个except
语句用于处理所有其他异常。
四、finally语句
在Python中,还有一个finally
语句,它用于定义在try
语句块完成后始终要执行的代码块。无论try
语句块是否引发异常,finally
语句块都将被执行。
以下是一个使用finally
语句的示例:
try:
# 可能引发异常的代码
f = open("myfile.txt", "r")
data = f.read()
print(data)
except:
# 处理异常
print("无法读取文件")
finally:
# 关闭文件
f.close()
在上面的示例中,我们尝试打开一个名为“myfile.txt”的文件,并读取其中的数据。如果出现任何异常,我们将打印“无法读取文件”。无论是否出现异常,我们都将使用finally语句块关闭文件。
五、自定义异常
除了Python内置的异常类之外,我们还可以定义自己的异常类。这可以通过创建一个新的异常类来实现。为了创建一个新的异常类,我们必须继承Python内置的Exception
类或其子类,并定义自己的异常消息。
以下是一个示例,演示如何定义自己的异常类:
class CustomError(Exception):
def __init__(self, message):
self.message = message
在上面的示例中,我们创建了一个名为CustomError的自定义异常类,它继承自Python内置的Exception
类。我们定义了一个构造函数,它接受一个消息参数,并将其存储为异常消息。
我们可以在程序中使用raise
语句来引发自定义异常:
try:
# 可能引发异常的代码
x = int(input("请输入一个正整数:"))
if x <= 0:
raise CustomError("输入必须是正整数")
except CustomError as e:
# 处理自定义异常
print(e)
except:
# 处理所有其他异常
print("发生了一个错误")
在上面的示例中,我们要求用户输入一个正整数。如果输入的值小于或等于0,我们将引发自定义异常CustomError,并在except
语句块中处理它。
六、assert语句
在Python中,还有一种异常处理技术是使用assert
语句。assert
语句用于检查某些条件是否为真,并在条件不满足时引发一个异常。assert
语句的基本语法如下:
assert <condition>, <error message>
在上面的代码中,<condition>
是一个布尔表达式,如果为False
,则会引发一个异常。<error message>
是一个可选的错误消息,用于描述何时发生了异常。
以下是一个使用assert语句的示例:
x = 10
assert x == 5, "x的值应该是5"
在上面的示例中,我们使用assert
语句检查变量x的值是否等于5。由于x的值是10,不等于5,因此将引发一个异常,并输出错误消息“x的值应该是5”。
七、Python内置异常
以下是Python 3.10版本中所有内置异常类型及其含义的分层次列表:
-
BaseException:所有内置异常的基类
-
SystemExit:程序退出时引发的异常
-
KeyboardInterrupt:用户中断程序时引发的异常
-
GeneratorExit:生成器函数被关闭时引发的异常
-
Exception:大多数内置异常的基类
-
StopIteration:用于迭代器的异常,表示迭代完成
-
StopAsyncIteration:用于异步迭代器的异常,表示迭代完成
-
ArithmeticError:所有算术异常的基类
-
FloatingPointError:浮点数运算异常
-
OverflowError:数值运算结果太大而无法表示
-
ZeroDivisionError:除数为零
-
-
AssertionError:断言语句(assert)失败
-
AttributeError:访问对象不存在的属性
-
BufferError:缓冲区操作失败
-
EOFError:没有读取到数据
-
ImportError:无法导入模块或模块不存在
- ModuleNotFoundError:无法找到模块
-
LookupError:无法找到值的基类
-
IndexError:索引超出序列范围
-
KeyError:字典中不存在键
-
-
MemoryError:内存耗尽
-
NameError:名称未声明或不存在
- UnboundLocalError:尝试访问未初始化的本地变量
-
OSError:由操作系统引起的异常
-
BlockingIOError:I/O操作无法立即完成
-
FileExistsError:文件已存在
-
FileNotFoundError:文件或目录不存在
-
InterruptedError:系统调用被中断
-
IsADirectoryError:尝试对目录进行文件操作
-
NotADirectoryError:尝试对非目录进行目录操作
-
PermissionError:没有适当的权限
-
ProcessLookupError:指定的进程不存在
-
TimeoutError:操作超时
-
-
ReferenceError:弱引用(weak reference)操作失败
-
RuntimeError:通用运行时异常的基类
-
NotImplementedError:尚未实现的方法
-
RecursionError:递归调用层数过多
-
-
SyntaxError:语法错误
- IndentationError:缩进错误
-
SystemError:解释器内部错误
-
TypeError:类型不匹配
-
ValueError:值不符合预期
- UnicodeError:Unicode相关的错误
-
Warning:警告的基类
-
DeprecationWarning:过时警告
-
PendingDeprecationWarning:即将过时警告
-
RuntimeWarning:运行时警告
-
SyntaxWarning:语法警告
-
UserWarning:用户自定义警告
-
FutureWarning:未来可能会改变的警告
-
ImportWarning:导入模块时的警告
-
UnicodeWarning:Unicode相关的警告
-
BytesWarning:bytes和bytearray相关的警告
-
-
-
请注意,Python的不同版本可能会有所不同。上面的列表只是Python 3.10版本中内置异常类型的一个示例,其他版本可能会有所不同。
八、总结
在Python中,异常处理是一种强大的机制,可用于捕获和处理错误。我们可以使用try
和except
语句来捕获异常,并在出现异常时执行特定的代码块。我们还可以使用finally
语句在try
语句块完成后执行一些代码。如果我们想捕获特定类型的异常,我们可以使用多个except
语句,并指定每个异常类型。我们还可以定义自己的异常类,并使用raise
语句引发自定义异常。最后,我们还可以使用assert
语句检查条件,并在条件不满足时引发异常。通过使用这些异常处理技术,我们可以编写更健壮、可维护和可靠的Python代码。
系列文章
🔥 Python 基础(一):初识 Python
🔥 Python 基础(二):搭建 Python 开发环境
🔥 Python 基础(三):Python 集成开发工具 IDLE
🔥 Python 基础(四):基础语法
🔥 Python 基础(五):变量与常量
🔥 Python 基础(六):基本数据类型
🔥 Python 基础(七):常用运算符
🔥 Python 基础(八):流程控制语句
🔥 Python 基础(九):列表
🔥 Python 基础(十):元组
🔥 Python 基础(十一):集合
🔥 Python 基础(十二):字典
🔥 Python 基础(十三):函数
🔥 Python 基础(十四):类和对象
🔥 Python 基础(十五):模块
🔥 Python 基础(十六):包
🔥 Python 基础(十七):库
热门专栏
👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》