Search code examples
pythonnumpybreakpoints

Breakpoint when encountering RunTimeWarning


I am having trouble getting the following code to work in Python:

for t in range(-5,5):
    try:
        a = np.log(t)
    except RunTimeWarning:
        breakpoint()

What I want is to execute the breakpoint statement, when the log function is evaluated from -5 to 0.


Solution

  • When using np.log(0), numpy won't throw an exception but a warning. These are significantly different from exceptions as an exception will stop the current code from running, whereas a warning just notifies you but keeps the code running.

    Take this example:

    >>> x = np.log(0)
    
    Warning (from warnings module):
      File "<pyshell#1>", line 1
    RuntimeWarning: divide by zero encountered in log
    >>> x
    -inf
    

    As you can see the variable x does get a value assigned -> the warning never kept log(...) from running and returning a value.

    So to solve your problem, you'd have to check if the value passed to your code is 0 before calling np.log. Or if you don't want -inf to be a valid return value but still need to call np.log for some reason, you can check if the value is -inf after the call. However it's best practise not to write code that causes warnings so you should probably just check if it's 0 before calling log.

    You can read more about warnings in the python docs.