How to Assert if an Exception Is Raised With Pytest?

Better Stack Team
Updated on May 15, 2024

Pytest can be used to test whether a function raises an exception. For instance, consider a division function that raises a ZeroDivisionError if there is an attempt to divide by zero:

 
def divide(x, y):
    return x / y

divide(9, 0)

Attempting to execute this function with zero as the divisor results in a ZeroDivisionError:

Output
Traceback (most recent call last):
  File "/users/stanley/code.py", line 5, in <module>
    divide(9, 0)
  File "/users/stanley/code.py", line 2, in divide
    return x / y
           ~~^~~
ZeroDivisionError: division by zero

To verify that this exception is raised as expected, use the pytest.raises in a test case:

 
import pytest

def divide(x, y):
    return x / y

def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        divide(9, 0)

When this test is run, it confirms that the divide() function behaves as expected by successfully raising a ZeroDivisionError when dividing by zero, indicated by a passing test result:

Output
...
collected 1 item

test.py::test_zero_division PASSED                                       [100%]

============================== 1 passed in 0.00s ===============================