Python type hinting with exceptions

PythonPython 3.xExceptionType HintingPython Typing

Python Problem Overview


I have a function that looks like this:

def check_for_errors(result):
	if 'success' in result:
        return True

    if 'error' in result:
        raise TypeError

    return False

In successful run of this function, I should get a bool, but if there is an error I should get a TypeError- which is OK because I deal with it in another function.

My function first line looks like this:

def check_for_errors(result: str) -> bool:

My question is: Should I mention the error in my type hinting?

Python Solutions


Solution 1 - Python

Type hinting can't say anything about exceptions. They are entirely out of scope for the feature. You can still document the exception in the docstring however.

From PEP 484 -- Type Hints:

> ## Exceptions > No syntax for listing explicitly raised exceptions is proposed. Currently the only known use case for this feature is documentational, in which case the recommendation is to put this information in a docstring.

Guido van Rossum has strongly opposed adding exceptions to the type hinting spec, as he doesn't want to end up in a situation where exceptions need to be checked (handled in calling code) or declared explicitly at each level.

Solution 2 - Python

It is usually a good idea to document the error. This means that another developer using your function will be able to handle your errors without having to read through your code.

Solution 3 - Python

i usually use:

def check_for_errors(result: str) -> bool | YourException:

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionYuval PrussView Question on Stackoverflow
Solution 1 - PythonMartijn PietersView Answer on Stackoverflow
Solution 2 - PythonJim WrightView Answer on Stackoverflow
Solution 3 - PythonIrwin Trinidad VargasView Answer on Stackoverflow