2016-12-22 92 views
0

如果你有這樣一個腳本:腳本名稱相同,導入模塊名稱

import requests 
requests.get() 

和你的名字requests.py你會得到一個屬性錯誤,指出requests有沒有屬性get因爲Python是指腳本名稱請求並且該名稱沒有屬性get

不過,如果我有這樣的腳本:

import time 
time.sleep() 

,我命名爲time.py,不會有任何錯誤。試用了Python 2.7.11和Python 3.5.3。

爲什麼這裏不適用同樣的規則?

回答

2

因爲time是內置的,並且要求是一個網站包裝:

嘗試打印__file__屬性,看看那裏的模塊位於:

print(time.__file__) 
AttributeError: 'module' object has no attribute '__file__' 

你得到一個錯誤,但requests

print(requests.__file__) 
C:\Python34\lib\site-packages\requests\__init__.py 

另一條線索是由help(time.__loader__)給出了答案:

>>> help(time.__loader__) 
Help on class BuiltinImporter in module importlib._bootstrap: 

class BuiltinImporter(builtins.object) 
| Meta path import for built-in modules. 

的請求:

>>> help(requests.__loader__) 
Help on SourceFileLoader in module importlib._bootstrap object: 

class SourceFileLoader(FileLoader, SourceLoader) 
| Concrete implementation of SourceLoader using the file system. 

反正打電話給你的模塊,內置插件或庫的包。在這兩種情況下,你都會遇到問題。

  • 後命名內置:您不能導入它,就如同一個站點包後看到
  • 命名:您不能導入網站包/你的模塊中使用它
相關問題