У меня есть два файла 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
Это ошибка, брошенная
Traceback (последний вызов был последним):
Файл "caller.py", строка 73, в
Файл "caller.py", строка 71, в вызывающей программе
Файл "callee.py", строка 4, в fn
Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 1062, в стеке
вернуть getouterframes (sys._getframe (1), context)
Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 1040, в getouterframes
framelist.append ((frame,) + getframeinfo (frame, context))
Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 1015, в getframeinfo
строки, lnum = findource (frame)
Файл "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", строка 579, в findource
if pat.match (lines [lnum]): break
IndexError: индекс списка вне диапазона
Похоже, что inspect пытается прочитать из исходного файла .py
, даже если он находится в другом каталоге.
Эта ошибка, по-видимому, не возникает при переходе в другой каталог.
Чем это объясняется? Ищет ли inspect.stack () эквивалент файла (caller.pyc) py
в текущем рабочем каталоге?