loctraceback

traceback with more exact location info


License
GPL-3.0
Install
pip install loctraceback==1.1.1

Documentation

CI status PyPI Installs Supported Python Versions

loctraceback

Want to see more precisely where you are or were at in a traceback or callstack your Python code has several places in a line it could have errored? Even if the code was something created at runtime with say eval or exec or if there was no source code that can be found?

Then this package is for you.

Some examples of the kinds of code this module can disambiguate:

i / j / k                              # which divide?
prev[prev[0]]                          # which prev ?
[e[0] for i in d[j] if got[i] == e[i]] # lots going on here
exec(some_code % 10, namespace)        # code at runtime

Some example output given by running code in `example`:

Division example:

Traceback (most recent call last):
  File "tb-div.py", line 9, in <module> at offset 52
    a / b / c
    a / b / c
      -
ZeroDivisionError: float division by zero

List comprehension example:

File "tb-comp.py", line 9, in <listcomp> at offset 18
    [e[0] for i in d[j] if got[i] == e[i]]
return [ e[0] for i in .0 if got[i] == e[i] ]
                             ------
IndexError: list index out of range

exec example:

Traceback (most recent call last):
 File "tb-exec.py", line 11, in <module> at offset 39
    exec(s)
    exec(s)
    -------
  File "<string>", line 4, in <module> at offset 18
  z = x / y
        -
  ZeroDivisionError: division by zero

Isolating function in call stack example:

File "call-fib.py", line 8, in fib at offset 58
  return fib(n-1) + fib(n-2)
  return fib(n - 1) + fib(n - 2)
                      ----------
    File "call-fib.py", line 10, in <module> at offset 54
         print("fib({})={}".format(2, fib(2)))
                                      ------

This modules extends the Python 3.6 API traceback module by adding in fragment decomplation info for more precise location information.

Although the API is from Python 3.6, the code runs on 3.3 or greater. Back-porting to ther Python versions is left as an exercise to the reader.

See these slides for information on the technology behind this.