嗨,我是Python的新手,我想详细了解以下内容:
我写了一个脚本,例如使用python html解析器的'foo.py',即
#!/usr/lib/python
from html.parser import HTMLParser # <-- executes ./tokenize.py ?!
...
偶然地,在当前目录中是另一个称为" tokenize.py"的python脚本。通过执行foo.py,导入行触发tokenize.py也将被执行。我想本地目录具有优先级,而html.parser模块也具有tokenize.py ...
但是到底发生了什么?
以及将来避免这种冲突的正确方法是什么?
thx
编辑:我运行Python 3.3.2
您是对的,当前目录中的模块首先加载。
避免这种情况的正确方法总是通过全名导入模块。在您的情况下,在html.parser
中,您应该这样导入tokenize
:
from html.parser import tokenize
而不是:
import tokenize
如果html.parser
是您无法控制的外部模块,请将您的tokenize.py
重命名为其他东西,例如:
from html.parser import tokenize as ext_tokenize