📜  Python中的错误和异常(1)

📅  最后修改于: 2023-12-03 15:34:27.354000             🧑  作者: Mango

Python中的错误和异常

在编写Python代码时,经常会遇到各种错误和异常。这些错误和异常是Python的自我保护机制,可以帮助用户检查和调试不良的代码。本文将介绍Python中的错误和异常,以及如何处理它们。

什么是错误?

错误是编写代码过程中发生的语法或语义错误。这种错误可以在代码编写期间立即检测到,也可以在程序运行期间检测到,导致程序无法正常运行。

什么是异常?

异常是程序在运行期间发生的错误。这种错误可能是由程序逻辑、输入数据等原因引起的。当程序执行遇到异常时,程序将停止执行并抛出异常信息。

Python异常层次结构

Python异常按照其类型被分类成不同的层次结构。Python 3中的异常层次结构如下:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- FileNotFoundError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning

Python内置了各种异常类型,可以根据需要创建自定义异常。如果发生异常,程序会停止执行,并抛出与异常相关的信息。处理异常的正确方法是捕获并处理它们,这将防止程序崩溃并产生更好的用户体验。

异常处理

捕获异常的语法结构如下:

try:
    # 检测异常的代码
except Exception1:
    # 处理异常 Exception1
except Exception2:
    # 处理异常 Exception2
else:
    # 没有异常的代码
finally:
    # 无论是否发生异常都执行的代码

以下是关于异常处理的详细解释:

  • try:在这一段代码中,我们定义了可能引发异常的代码块。
  • except:在这一段代码中,我们定义了处理异常的代码块。
  • else:在这一段代码中,我们定义了没有发生异常时应该执行的代码块。
  • finally:在这一段代码中,我们定义了无论是否发生异常都应该执行的代码块。

以下是一个简单的程序,用来演示异常处理:

try:
    text = input('请输入一个整数:')
    num = int(text)
    print('你输入的数字是:', num)
except ValueError:
    print('输入的内容不是数字')
except KeyboardInterrupt:
    print('用户终止了程序')

程序的执行顺序是:

  1. 询问用户输入一个数字。
  2. 尝试将输入的内容转换为数字。
  3. 如果发生值错误,将提示用户输入的内容无效。
  4. 如果发生键盘中断,将提示用户程序被终止。
自定义异常

除了使用Python内置异常之外,还可以根据需要定义自己的异常,如下所示:

class MyError(Exception):
    def __init__(self, message):
        self.message = message
    def __str__(self):
        return self.message

try:
    raise MyError('我的异常')
except MyError as e:
    print(e)

这个程序使用自定义异常类来创建了一个异常对象,并在程序中触发了该异常对象。

总结

Python中的错误和异常是程序编写中不可避免的问题。当错误和异常发生时,它们会提供有用的信息,以帮助我们及时修复我们的代码。为了处理异常,我们可以使用try-except语句,它使我们捕获和处理我们代码中可能出现的异常。除了内置的异常类型之外,我们还可以定义自己的异常,以便使用。