Python Forum

Full Version: Change linenumber and filename printed in exceptions like #line in C
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,
As you might know, there is the #line command in the C-preprocessor:

#include <stdio.h>
#line 20 "abc"
int main() {
    printf("%i %s\n", __LINE__, __FILE__); //outputs 22 abc
}
Is there something like this #line command in python? I want to change what is printed in exceptions.
I tried:
import inspect
frame = inspect.currentframe()
fileNo = frame.f_lineno
frame.f_lineno=1000
But this resulted in the output
Output:
Traceback (most recent call last): File "pythontest.py", line 4, in <module> frame.f_lineno=1000 ValueError: f_lineno can only be set by a trace function
In case you were wondering why I would want to change the filename and filenumber: In my workflow, I have a files that contain python source code and other text. A script searches those python source code blocks, puts them into the right order, writes them into a file (called sum.py) and executes this file. This works fine, but obviously exceptions show the linenumber in sum.py and not the linenumber in the original files.
They're called dunders (double underscore) in python list here: https://docs.python.org/3/reference/impo..._#__name__
for exceptions, you can examine the call stack
see: https://python-forum.io/Thread-Walking-t...ight=stack
I don't think there is any equivalent of the #line preprocessing directive in python. What you could do is catch the exception and transform the output of traceback.format_tb() by replacing items such as ['File "sum.py" line 10 ...'] with the correct line and file reference. This supposes that you store these position informations in a separate file when you create sum.py.