提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Python 中的异常处理是通过 try 和 except 语句块来实现的。这种机制允许你检测并处理在程序执行过程中发生的错误。使用异常处理,你可以编写出更加健壮、用户友好的代码,即使在遇到错误时也能优雅地处理,而不是让程序崩溃。
提示:以下是本篇文章正文内容,下面案例可供参考
一、异常捕获的基本语法
- try:可能发生异常的语句
- except:捕获到异常,针对异常做出的处理
- else:没有发生异常执行的语句
- finally:不管有没有异常都会执行的语句
try:
# 尝试执行的代码块
pass
except ExceptionType1:
# 如果在try块中抛出了ExceptionType1异常,则执行这里的代码
pass
except (ExceptionType2, ExceptionType3):
# 如果在try块中抛出了ExceptionType2或ExceptionType3异常,则执行这里的代码
pass
except Exception as e:
# 捕获所有其他类型的异常
print(f"An error occurred: {e}")
else:
# 如果没有异常发生,则执行这里的代码
pass
finally:
# 无论是否发生异常,都会执行这里的代码
pass
其中Exception为所有异常的父类,包含了所有异常。
二、常见的异常
ZeroDivisionError
: 当除数为零时引发的异常。
IndexError
: 索引不存在引发的异常。
KeyError
: 键不存在引发的异常。
TypeError
: 不支持给操作的数据类型异常。
ValueError
: 不支持值的数据类型异常。
IOError
: 当发生I/O错误时引发的异常。
MemoryError
: 当内存不足时引发的异常。
OverflowError
: 无法表示为浮点数时引发。
SyntaxError
: 遇到语法错误时引发。
IndentationError
: 遇到缩进错误时引发。
TabError
: 当混合使用制表符和空格进行缩进时引发。
示例
代码如下:
while True:
a = input('输入数字:')
b = input('输入数字:')
try:
a = int(a)
b = int(b)
print(a / b)
except ZeroDivisionError as e:
print('除数为零错误', e)
except TypeError as e:
print('数据类型错误', e)
except ValueError as e:
print('数据错误', e)
except Exception as e:
print('未知错误', e)
自定义异常
在Python 我们还可以通过继承内置的 Exception 类来实现自定义异常。
class LTZero(Exception):
"""定义一个小于0的异常"""
def __init__(self, msg):
super().__init__(msg)
while True:
input_str = input('输入一个数字:')
try:
input_int = int(input_str)
except ValueError as e:
print(f'数据类型异常:{e}')
else:
try:
if input_int < 0:
raise LTZero('输入数字小于0')
except LTZero as e:
print(f'异常情况:{e}')
else:
print('奇数' if input_int % 2 else '偶数')