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 语句,可以精确地捕获不同类型的异常。最佳实践是只处理你知道如何处理的异常,并且在出现异常时不要简单地打印错误信息,而是应该记录日志以便查看。在开发过程中,合理的使用异常处理能够提高代码的可靠性和稳定性,值得我们在编写代码的时候认真思考和实践。