У меня есть два файла caller.py и callee.py
caller.py
##
##
##
##
##
##
##
##
##
from callee import fn
def caller():
fn()
caller()
callee.py
import inspect
def fn():
print inspect.stack()
Теперь я скомпилировал и caller.py
, и callee.py
, чтобы получить соответствующие файлы pyc
, и переместил их в новый каталог compiled
. Это структура каталогов.
├── __init__.py
├── callee.py
├── caller.py
└── compiled
├── __init__.pyc
├── callee.pyc
└── caller.pyc
Я модифицировал caller.py, чтобы удалить все комментарии, в результате получилось: caller.py
from callee import fn
def caller():
fn()
caller()
Когда я выполняю python compiled/caller.pyc
, возникает ошибка
Трассировка (последний последний вызов): файл «caller.py», строка 73, в
Файл caller.py, строка 71, в caller
Файл "callee.py", строка 4, в fn
Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 1062, в стеке return getouterframes(sys._getframe( 1), контекст) Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 1040, в списке фреймов getouterframes. append((frame,) + getframeinfo(frame, context)) File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py ", строка 1015, в строках getframeinfo, lnum = findsource(frame) File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect. py", строка 579, в findsource, если pat.match(lines[lnum]): break IndexError: индекс списка вне допустимого диапазона
Похоже, inspect пытается прочитать исходный файл .py
, даже если он находится в другом каталоге. Эта ошибка не возникает, когда я перехожу в какой-либо другой каталог.
Чем это объясняется? Ищет ли inspect.stack() py
эквивалент имени файла (caller.pyc) в текущем рабочем каталоге?