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