Я не знаю, если это на самом деле хорошая идея, но так как я на самом деле написал крюк, чтобы отобразить файл и строку перед каждой строкой вывода на стандартный вывод, я мог бы также дать его вам ...
import inspect, sys
class WrapStdout(object):
_stdout = sys.stdout
def write(self, buf):
frame = sys._getframe(1)
try:
f = inspect.getsourcefile(frame)
except TypeError:
f = 'unknown'
l = frame.f_lineno
self._stdout.write('{}:{}:{}'.format(f, l, buf))
def flush(self):
self._stdout.flush()
sys.stdout = WrapStdout()
Просто сохраните это как модуль, а после вас import
его, каждый кусок stdout будет иметь префикс файла и номера строки.
Конечно, это будет получить очень некрасиво, если:
- Любой пытается напечатать частичные линии (с помощью
stdout.write
непосредственно или print
магии запятой в 2.x или end=''
в 3.x).
- Вы смешиваете Unicode и не-Unicode в 2.x.
- Любой из исходных файлов имеет длинные пути.
- т.д.
Но все каверзные глубоко Python-магические биты есть; вы можете построить поверх нее довольно легко.
Вы можете просто запустить его через отладчик в пошаговом режиме, проверить pdb http://docs.python.org/2/library/pdb.html –
Есть также несколько приятных интерактивных визуализаторов, таких как [этот онлайн ] (http://pythontutor.com/visualize.html#). Не так хорошо, как отладчики для «теперь, когда я нахожусь в этой точке останова, позвольте мне оценить некоторые произвольные выражения», но намного лучше получить быстрый обзор потока. – abarnert