我有两个文件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,位于呼叫者中
fn中第4行的文件“ callee.py”
文件“ /usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py”,第1062行,在堆栈中 返回getouterframes(sys._getframe(1),上下文) 在getouterframes中的文件“ /usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py”,行1040 framelist.append((frame,)+ getframeinfo(frame,context)) getframeinfo中的文件“ /usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py”,行1015 行,lnum = findsource(frame) findsource中的文件“ /usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py”,行579 如果pat.match(lines [lnum]):中断 IndexError:列表索引超出范围
看起来好像inspect正在尝试从源文件.py
中读取,即使它位于另一个目录中也是如此。
当我导航到其他目录时,似乎没有发生此错误。
对此有何解释? inspect.stack()是否在当前工作目录中查找等效的文件名(caller.pyc)py
?
答案 0 :(得分:0)
Python会根据其PATH
寻找合适的模块,并且查找它们的第一位是启动程序时所在的文件夹。
如果您希望解释器忽略原始源文件,请移至.pyc
文件所在的目录并使用python caller.pyc
启动脚本