脚本collections.py代码如下
#!/usr/bin/python3
#-*- coding: utf-8 -*-
#collections
from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p=Point(1,2)
print('x=',p.x,'y=',p.y)
在linux下,执行脚本后,报错
[root@localhost MyPython]# python3 collections.py
Traceback (most recent call last):
File "collections.py", line 4, in <module>
from collections import namedtuple
File "/home/chentengbo/share/MyPython/collections.py", line 4, in <module>
from collections import namedtuple
ImportError: cannot import name 'namedtuple'
之前的导入其他模块都是没有问题的,在网上查找了几种解释,都不能解决我的问题,最后怀疑是脚本的名字和导入的模块的名字起了冲突,
[root@localhost MyPython]# cat collections.py
#!/usr/bin/python3
#-*- coding: utf-8 -*-
#collections
from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p=Point(1,2)
print('x=',p.x,'y=',p.y)
将脚本名字改为collectionstest后,再执行,果然成功了。
为了详细了解,我将脚本的名字改为了namedtuple.py,执行后,并未出现上述类似的错误。
[root@localhost MyPython]# python3 namedtuple.py
x= 1 y= 2
问题总结:
对于脚本的名字的选择一定要严谨,不能选择python的模块名作为脚本的名字,以避免出现一些意外的错误,对于模块中的函数名,尽管以它作为脚本名并未报错,但是还是不建议使用类似的关键字命名脚本,希望大家能引以为戒。