2016-12-22 12 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. 

Во всяком случае, не называют свои модули, встроенные модули или библиотеки пакетов. В обоих случаях у вас будут проблемы.

  • имен после того, как встроенные, вы не можете импортировать его, как вы видели
  • именования после того, как пакет сайта, вы не можете импортировать пакет сайта/использовать его в модуле

 Смежные вопросы

  • Нет связанных вопросов^_^