Python3 错误和异常
Python3 错误和异常
异常简介
在Python3中,如果代码运行时出现错误或异常情况,会产生一个异常(Exception),这会导致代码停止执行。
Python中有许多内置的异常类型,例如:TypeError、SyntaxError、ValueError等。我们使用try-except语句块来处理这些异常并防止程序崩溃。
try-except 语句
try语句包含需要进行异常处理的代码块。在try语句块中,可以一次性处理多个异常。except语句定义了要处理的异常类型,并包含相应的程序语句块。
语法格式:
try:
# 运行的代码块
except [异常类型]:
# 异常处理的语句块
以下是一个简单的例子,演示了try-except语句的使用:
try:
num1 = 10
num2 = 0
result = num1/num2 # 除数为0的错误
except ZeroDivisionError:
print("除数不能为零!")
此时程序会对异常情况进行处理,而不会因为运行错误而崩溃。
处理多个异常
如果需要处理多个异常类型,可以使用多个except语句。以下是一个包含三个不同异常类型的例子:
try:
a = [1, 2, 3]
print(a[3]) # 超出列表长度报错
num = 10 / 0 # 除数为0的错误
print(num)
s = "hello"
print(s + 1) # 类型错误
except IndexError:
print("列表索引超出范围!")
except ZeroDivisionError:
print("除数不能为零!")
except TypeError:
print("类型错误!")
在这个例子中,发生过程中的每个异常都会被处理,并打印相应的错误信息。
处理所有异常
如果想捕捉所有的异常,可以使用except语句中不定义类型,以此来处理所有的异常情况。以下是一个处理所有异常的例子:
try:
num = 10/0
except:
print("发生错误!")
else语句
try-except语句块还可以使用else语句,指定在没有发生任何异常时要执行的语句。例如:
try:
# 想要执行的代码块
except ExceptionType:
# 处理异常的代码块
else:
# 没有异常发生时要执行的代码块
finally语句
如果想要无论异常是否发生都要执行代码块,可以使用finally语句。以下是一个例子:
try:
# 想要执行的代码块
except ExceptionType:
# 处理异常的代码块
finally:
# 不管是否发生异常都要执行的代码块
Python3 内置异常
Python3 中有许多内置的异常,以下是一些常见的异常类型:
异常类型 | 描述 |
---|---|
AssertionError | 断言语句(assert)失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内置 input() 函数 |
ImportError | 导入模块失败 |
IOError | 输入输出操作失败 |
IndexError | 索引超出范围 |
KeyError | 字典中使用关闭键 |
KeyboardInterrupt | 用户中断 |
MemoryError | 内存溢出 |
NameError | 使用未定义的变量 |
OverflowError | 数字运算超出最大限制 |
SyntaxError | 语法错误 |
SystemError | Python 内部错误 |
TypeError | 不同类型间的无效操作 |
UnboundLocalError | 通过 local() 访问未定义的局部变量 |
UnicodeError | 与Unicode相关的错误 |
ValueError | 值错误 |
ZeroDivisionError | 除数为零 |
异常处理的最佳实践
- 尽可能的只处理你知道如何处理的异常
- Reraise(重新抛出)重要的异常
- 记录异常并返回友好的错误信息
- 记录调试信息(比如输入输出和语句的值)以便debug
个人总结
在 Python3 中,异常处理可以有效地防止程序崩溃。通过使用 try-except 语句,可以精确地捕获不同类型的异常。最佳实践是只处理你知道如何处理的异常,并且在出现异常时不要简单地打印错误信息,而是应该记录日志以便查看。在开发过程中,合理的使用异常处理能够提高代码的可靠性和稳定性,值得我们在编写代码的时候认真思考和实践。