Skip to main content

Print each local variable and line of code at execution

Project description

I wrote this before I learnt about Snoop: https://github.com/alexmojaki/snoop a much polished version of the same concept and implementation with an additional set of debug tools.

Tracelogger

Tag your functions with the @tracelogger decorator to be logged line-by-line.

Optionally provide a function as the printer argument that takes the local variable dictionary and returns a string. This allows the customisation of which variables and how you want to print at each line. See the example with the provided names_printer function that only prints a selected set of variables.

The second width parameter determines the maximum character number for each line of code defaulting to 80.

from tracelogger import tracelogger, names_printer


@tracelogger(width=30)
def second_test_function(x):
    y = x**2
    return y


@tracelogger(printer=lambda locals_: names_printer(locals_=locals_, names=['k', 'b']), width=30)
def first_test_function(a, b):
    c = a + b
    for k in range(5):
        if k % 2 == 0:
            b += k
        else:
            c += k
            second_test_function(c)
    return a, b, c

a, b, c = first_test_function(a=10, b=20)

This will print the following:

Entering function: first_test_function
    c = a + b                            locals: b=20
    for k in range(5):                   locals: b=20
        if k % 2 == 0:                   locals: b=20, k=0
            b += k                       locals: b=20, k=0
    for k in range(5):                   locals: b=20, k=0
        if k % 2 == 0:                   locals: b=20, k=1
            c += k                       locals: b=20, k=1
            second_test_function(c)      locals: b=20, k=1

Entering function: second_test_function
    y = x**2                             locals: x=31
    return y                             locals: x=31, y=961
    return y                             locals: x=31, y=961
Returning from: second_test_function() to: first_test_function()

    for k in range(5):                   locals: b=20, k=1
        if k % 2 == 0:                   locals: b=20, k=2
            b += k                       locals: b=20, k=2
    for k in range(5):                   locals: b=22, k=2
        if k % 2 == 0:                   locals: b=22, k=3
            c += k                       locals: b=22, k=3
            second_test_function(c)      locals: b=22, k=3

Entering function: second_test_function
    y = x**2                             locals: x=34
    return y                             locals: x=34, y=1156
    return y                             locals: x=34, y=1156
Returning from: second_test_function() to: first_test_function()

    for k in range(5):                   locals: b=22, k=3
        if k % 2 == 0:                   locals: b=22, k=4
            b += k                       locals: b=22, k=4
    for k in range(5):                   locals: b=26, k=4
    return a, b, c                       locals: b=26, k=4
    return a, b, c                       locals: b=26, k=4
Returning from: first_test_function() to: None

Join the Code Quality for Data Science (CQ4DS) Discord channel for feedback.

I used the following StackOverflow threads as sources, many thanks to their authors:

https://stackoverflow.com/questions/32163436/python-decorator-for-printing-every-line-executed-by-a-function

https://stackoverflow.com/questions/22362940/inspect-code-of-next-line-in-python

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tracelogger-0.1.3.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

tracelogger-0.1.3-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

Details for the file tracelogger-0.1.3.tar.gz.

File metadata

  • Download URL: tracelogger-0.1.3.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.6 Linux/6.2.0-1016-azure

File hashes

Hashes for tracelogger-0.1.3.tar.gz
Algorithm Hash digest
SHA256 07ab00ed59afcb087a7863d429d36369a61eedcbe606a18f7aabc3ad295d6d61
MD5 bfd343e6b47e16c99a5ec3eb77dd7282
BLAKE2b-256 b67193f05a101c865e6b648360b277ff299a82bbbd43aecf8cf77d48fedd36c3

See more details on using hashes here.

File details

Details for the file tracelogger-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tracelogger-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 4.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.6 Linux/6.2.0-1016-azure

File hashes

Hashes for tracelogger-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 76e9c9c945613183178951a443a265f27ad892d0f11ec0c088d9e748c58ba52f
MD5 bbcd9574570f573103265e304395da18
BLAKE2b-256 020d59dbbaa8ee2bd7469f75e63baaf5f2b30d36d3fd48d728ccb2f601f5f383

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page