Ścieżka śledzenia i numer linii

Używam Pythonatrace moduł do śledzenia kodu. Kiedy śledzę kod w ten sposób, mogę uzyskać jeden z dwóch następujących wyników:

Połączenie:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix])
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Wynik:

<filename>(<line number>): <line of code>

Połączenie [cytat]:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix], countfuncs=True)
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Wynik:

filename:<filepath>, modulename:<module name>, funcname: <function name>

To, czego naprawdę potrzebuję, to ślad, który daje mi to:

<filepath> <line number>

Wydawałoby się, że mógłbym wykorzystać powyższe informacje i przeplatać je, aby uzyskać to, czego potrzebuję, ale taka próba nie powiedzie się w następującym przypadku użycia:

sys.path zawiera katalogA i katalogB.Istnieją dwa plikiA/foo.py iB/foo.pyObieA/foo.py iB/foo.py zawierają funkcjębar, zdefiniowane w liniach 100–120Istnieją niewielkie różnice między nimiA/foo.py iB/foo.py

W tym scenariuszu użycie takiego przeplatania do prawidłowego określenia, którebar jest wywoływane jest niemożliwe (proszę poprawić mnie, jeśli się mylę) bez statycznej analizy kodu w każdym z nichbar, co jest bardzo trudne dla nietrywialnych funkcji.

Jak więc mogę uzyskać poprawne dane wyjściowe, których potrzebuję?

questionAnswers(1)

yourAnswerToTheQuestion