Python异常处理

程序员卷不动了 2023-03-15 PM 51℃ 0条

Python异常处理是一种在运行时检测到的错误或异常的处理方式。当程序出现异常时,程序将中止,并通过异常消息返回到程序的调用者。

在Python中,提供了异常处理机制,使程序能够恰当地处理错误并进行清理。Python的异常处理机制使用了 try 和 except 语句块。

异常处理语法格式如下:

 try:
    # 代码块
except ExceptionType:
    # 异常处理代码块

其中,try 代码块包含被监视的代码,如果异常发生,控制将转移到 except 代码块。 ExceptionType 指定了要捕获的异常类型,如果发生指定类型的异常,则执行 except 代码块。

让我们通过一个简单的例子来了解异常处理的工作原理。

 try:
    num1 = int(input("Enter a number:"))
    num2 = int(input("Enter another number:"))
    print("Result is:", num1 / num2)
except ZeroDivisionError:
    print("Cannot divide by zero!")
except ValueError:
    print("Invalid input!")

在上面的代码中,我们使用 try 语句块来包含输入两个数字和输出结果的代码。如果输入的第二个数字是零,则会触发 ZeroDivisionError 异常。

如果输入的内容无法转换为数字,则会触发 ValueError 异常。

在这种情况下,我们使用 except 代码块来处理相应的异常。

except 代码块只会在相应的异常发生时运行。

此外,您还可以使用 else 关键字定义一个代码块,当没有异常发生时运行。

 try:
    num1 = int(input("Enter a number:"))
    num2 = int(input("Enter another number:"))
except ValueError:
    print("Invalid input!")
else:
    print("Result is:", num1 / num2)

在这种情况下,如果没有触发 ValueError 异常,则输出结果。如果有异常发生,则输出相应消息。

Python 异常处理机制。除了 tryexcept 语句外,还有其他几种语句和方法可以更好地实现异常处理。

finally 语句

finally 代码块包含代码,无论是否发生异常,都将运行。通常在 finally 代码块中包含清理操作,例如关闭打开的文件等。finally 关键字用于将要在所有情况下都要执行的语句打包到一个代码块中。

try:
    f = open('file.txt')
    # 执行一些代码
except IOError:
    print('IOError')
finally:
    f.close()

在上述代码中,即使在执行 try 代码块时触发了 IOError 异常,文件也将被关闭。这是由于 finally 代码块始终会执行,而不管 try 代码块是否成功执行。

assert 语句

assert 关键字用于编写测试代码和调试代码。它使您可以在代码中添加检查,以确保程序的特定部分按照预期运行。assert 语句的一般形式是:

assert expression, message

其中,expression 是您要检查的条件。如果 expression 为假,则会触发 AssertionError 异常,并将 message 打印到控制台。

举个例子:

x = 2
assert x == 2, 'x is not equal to 2'

在上述代码中,如果 x 不等于 2,则会引发 AssertionError 异常,并将 x is not equal to 2 打印到控制台。

raise 语句

raise 关键字使您能够在 Python 中手动引发异常。

raise Exception('error message')

在上述示例中,如果代码中某个特定条件不满足,则可以引发异常。被引发的异常可以是 Python 中的任何异常,例如 ValueError、TypeError 等等。

引发异常会中止程序的执行,并引发所选的异常,导致异常处理程序开始执行。

异常处理是 Python 中一个重要的概念,帮助程序员优雅地处理错误,并允许一些清理操作在程序出现问题时仍能够执行。finally 代码块是一个很好的实现清理操作的方式,而 assertraise 关键字则在测试和调试方面非常有用。

非特殊说明,本博所有文章均为博主原创。

上一篇 Python类和对象
下一篇 Python装饰器

评论啦~