我对Python没有很深的经验。在最后一个应用程序上工作发现了一件非常有趣的事情。我将名为pwd.py的脚本放在与主脚本相同的目录中。我创建pwd.py是为了测试一些基本的模块和方法,没有更多的用途。
但是后来我发现我的主要脚本间接地调用了pwd.py,我真的很惊讶!我放置了一些调试输出,并发现导入语句"import comtypes.client“调用了pwd.py。
嗯.我想这可能是一些我还不知道的标准特征,但是:
那么,它的特点是什么,为什么在任何地方都不能很好地描述它呢?这甚至是一种弱点。您可以在主脚本所在的同一个目录中创建pwd.py,并将任何代码放入pwd.py中.
有人能在自己的系统上检查一下这种行为吗?如果它真的有效,我在哪里可以找到这个特性的描述?
发布于 2015-04-28 18:48:01
我发现“导入comtypes.client”行导致了这个“问题”。以下是主要脚本的内容:
#!C:\Python343\python
import comtypes.client # this line causes pwd.py to be called indirectly !!!下面是放在同一个目录中的pwd.py的内容:
#!C:\Python343\python
print('pwd.py is called!')
raise RuntimeError("We got here!") # I put an exception as Kevin asked me above, but I am not sure that Python knows "throw" (it does not work for me) so use "raise"在此之后,我得到了以下结果:
c:\dev>test.py
pwd.py is called!
Traceback (most recent call last):
File "C:\dev\test.py", line 2, in <module>
import comtypes.client # this line causes pwd.py to be called indirectly !!!
File "C:\Python343\lib\site-packages\comtypes\client\__init__.py", line 31, in <module>
from comtypes.client._code_cache import _find_gen_dir
File "C:\Python343\lib\site-packages\comtypes\client\_code_cache.py", line 7, in <module>
import ctypes, logging, os, sys, tempfile, types
File "c:\Python343\Lib\tempfile.py", line 34, in <module>
import shutil as _shutil
File "c:\Python343\Lib\shutil.py", line 24, in <module>
from pwd import getpwnam
File "C:\dev\pwd.py", line 3, in <module>
raise RuntimeError("We got here!")
RuntimeError: We got here!所以呼叫链是:
C:\dev\test.py
C:\Python343\lib\site-packages\comtypes\client\__init__.py
C:\Python343\lib\site-packages\comtypes\client\_code_cache.py
c:\Python343\Lib\tempfile.py
c:\Python343\Lib\shutil.py
C:\dev\pwd.py而“从pwd导入getpwnam”行似乎负责pwd.py的调用。在此之后,我以以下方式更改了我的主脚本:
#!C:\Python343\python
import pwd # I know it's you!真的,它叫pwd.py!谢谢凯文这个简单的想法。剩下的唯一问题是,“导入pwd”从同一个目录调用pwd.py是否正确?非常有趣的特点:-)
https://stackoverflow.com/questions/29856520
复制相似问题