Meaning
Asserts that a specific exception is raised within the indented block; the test passes if the exception is raised, fails otherwise.
Primary Function
Assert that a specific exception is raised during test execution.
Communicative Purpose
Communicates the expectation that a particular exception will be raised, making the test's intent explicit.
Pattern
with pytest.raises(ExceptionType):
Core Structure
with pytest.raises(ExceptionType):
Função primária
Assert that a specific exception is raised during test execution.
Propósito comunicativo
Communicates the expectation that a particular exception will be raised, making the test's intent explicit.
Situações de gatilho
When writing a test that expects a function or method to raise a specific exception under certain conditions.
Contextos
Inside pytest test functions when validating error handling, edge cases, or failure modes of code under test.
Padrão
with pytest.raises(ExceptionType):
Estrutura central
with pytest.raises(ExceptionType):
Slots de substituição
ExceptionType: type of exception to catch (must be a subclass of BaseException)
Colocados típicos
- pytest
- test
- assert
- raise
- ValueError
- TypeError
- Exception
- match
Substituições comuns
- ValueError → TypeError
- KeyError
- AssertionError
- CustomException
- using pytest.raises(Exception) to catch any exception
Erros comuns
1. Forgetting the colon after the exception type → SyntaxError: invalid syntax. 2. Using unittest's assertRaises incorrectly → test may pass incorrectly because exception not caught. 3. Forgetting to indent code under the with block → IndentationError or code runs outside context, causing false pass. 4. Catching too broad an exception (Exception) when a specific one is expected → test may pass for wrong exception, hiding bugs. 5. Using pytest.raises outside a test function → pytest raises MisplacedFixtureError.
Similar / contraste
pytest.raises vs unittest.TestCase.assertRaises: pytest.raises works as a context manager or callable, more flexible; unittest.assertRaises requires method call. pytest.raises vs pytest.warns: former asserts exception, latter asserts warning. pytest.raises vs pytest.raises(None): former asserts an exception is raised, latter asserts no exception is raised.
Interferências
Coming from unittest: may forget to use the context manager form and write self.assertRaises(ValueError, func, *args) incorrectly, leading to missed assertions → use pytest.raises context manager or callable form. Coming from other languages: may expect try/except to swallow the exception → remember pytest.raises expects the exception to propagate to fail the test if not raised.
Família do chunk
- pytest assertions
- testing idioms
- exception handling patterns
Nuance
1. NOT to use when you need to assert that no exception is raised; use pytest.raises(None) or let code run and assert no exception. 2. Performance impact is negligible; only minimal context manager overhead. 3. Boundary: must be used inside a test function; using outside pytest raises MisplacedFixtureError; also the exception must be raised directly in the block unless using the callable form.
Efeito pragmático
Ensures tests reliably verify error conditions, preventing false passes and increasing confidence in error handling code.
Dica de memória
Like a safety net that catches the expected exception and fails the test if the net stays empty.
Nota
Used in pytest to assert that a specific exception is raised.
Upgrade path
Using pytest.raises with the match parameter to assert exception message matches a regex, or using the callable form pytest.raises(Exception, func, *args) for more flexible testing.
Log in to save chunks.