Skip to content

Pytest异常处理

Pytest 异常处理

简介

在 Pytest 中,异常处理是指在测试过程中捕获和处理代码中抛出的异常。异常处理是一种重要的测试技术,可以用来验证代码在预期抛出异常的情况下是否正确进行处理。在 Pytest 中,可以使用pytest.raises上下文管理器来捕获代码执行过程中抛出的特定异常,并允许对该异常进行断言。

Pytest 异常处理的优点

  1. 简单易用:Pytest 异常处理使用pytest.raises上下文管理器来捕获和断言代码中的异常。这种方法非常简洁明了,使得测试异常情况的代码编写变得更加简单和直观。

  2. 方便的断言和自定义:使用pytest.raises,可以轻松地对捕获的异常进行断言。通过对异常的属性或字符串表示进行断言,可以验证异常是否与预期一致。

  3. 可扩展性:Pytest 异常处理不仅可以捕获特定的异常,还可以处理多个异常。通过在pytest.raises上下文管理器中使用逗号分隔的异常列表,可以捕获和处理多个异常情况。这使得异常处理更加灵活和可扩展。

  4. 可读性和可维护性:Pytest 异常处理使用了 Python 的上下文管理器机制,使得代码更加清晰和易于理解。在使用pytest.raises时,测试代码中的异常处理部分可以与其他测试步骤分开,从而提高代码的可读性和可维护性。

常用的异常处理方法

  • try...except

  • pytest.raises()

try ...except 的使用

代码示例:

try:
    可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:
    处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
    处理异常的代码块2
except  [Exception]:
    处理其它异常

try :
    a = int(input("输入被除数"))
    b = int(input("输入除数"))
    c = a / b
    print("您输入的两个数相除的结果是:", c)
except (ValueError, ArithmeticError):
    print("程序发生了数字格式异常、算数异常之一")
except :
    print("未知异常")
print("程序继续运行")

运行结果:

pytest.raises() 的使用

  • 可以捕获特定的异常。
  • 获取捕获的异常的细节(异常类型,异常信息)。
  • 发生异常,后面的代码将不会被执行。

pytest.raises() 用法详细讲解可参考 Pytest 的官网,地址如下:

https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest-raises

代码示例:

import pytest

def test_raise():
    with pytest.raises(ValueError, match='must be 0 or None'):
        raise ValueError("value must be 0 or None")

def test_raise1():
    with pytest.raises(ValueError) as exc_info:
        raise ValueError("value must be 42")
    assert exc_info.type is ValueError
    assert exc_info.value.args[0] == "value must be 42"

运行结果:

总结

  • Pytest 异常处理的优点。
  • Pytest 异常处理的方法。