Python之一个脑残的问题
本来想写一个可以编码解码BASE64的小脚本,结果出了个问题,使用base64.b64encoding(str)的时候,总提示模块中没有这个方法,于是dir(base64),发现只有寥寥几个方法,根本没有编码和解码的方法。
文件如下:
import sys
import base64
import getopt
opts, args = getopt.getopt(sys.argv[1:], "d:e:")
for op, value in opts:
if op == "-d":
# decode the input string
print base64.b64decode(value)
if op == "-e":
# encode the input string
print base64.b64encode(value)
很简单的一个脚本。感觉是import的时候出问题了。
先去查了一下import的顺序,是从sys.path进行import的。打印出来这个路径,进去找了找。
之后进行python -vv,之后import,看看python在import base64的时候都import了哪些文件。发现在lib目录下import了一个base64.py。
然后突然发现我这个脚本的文件名也叫base64.py,它应该是把自己import进去了,并没有import真正的模块,于是把自己改个名字再运行,一切正常。
听君一席话胜读十年书啊。。。。
他是优先import当前目录下的吗?涨姿势了。
Edward_L大神!
cool
记得何少当年踩过这个坑. 没有类似命名空间的机制的话,文件还是习惯性加前缀吧, 除了和标准库冲突, 和各种第三方也可能冲突..