腳本collections.py代碼以下python
#!/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下,執行腳本後,報錯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後,再執行,果真成功了。code
爲了詳細瞭解,我將腳本的名字改成了namedtuple.py,執行後,並未出現上述相似的錯誤。utf-8
[root@localhost MyPython]# python3 namedtuple.py x= 1 y= 2
問題總結:io
對於腳本的名字的選擇必定要嚴謹,不能選擇python的模塊名做爲腳本的名字,以免出現一些意外的錯誤,對於模塊中的函數名,儘管以它做爲腳本名並未報錯,可是仍是不建議使用相似的關鍵字命名腳本,但願你們能引覺得戒。ast