2016-12-22 6 views
0

Wenn Sie ein Skript wie haben:Skriptname gleicher wie importierte Modulnamen

import requests 
requests.get() 

und nennen Sie es requests.py Sie ein Attribut Fehler erhält, dass requests kein Attribut hat get weil Python ist mit dem Skript Namen nennen Anfragen und dieser Name hat kein Attribut get.

Allerdings, wenn ich dieses Skript haben:

import time 
time.sleep() 

und ich nenne es time.py, wird es kein Fehler sein. Versucht sowohl Python 2.7.11 als auch Python 3.5.3.

Warum gilt hier nicht die gleiche Regel?

Antwort

2

weil time ist eingebaut, und Anfrage ist ein Site-Paket:

Drucken Versuchen Sie, die __file__ Attribut, um zu sehen, wo sich das Modul befindet:

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

erhalten Sie einen Fehler, aber mit requests Sie erhalten die Antwort

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

ein weiterer Hinweis von help(time.__loader__) gegeben:

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

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

für Anfragen:

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

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

Wie dem auch sei, nicht rufen Sie Ihre Module als Einbauten oder Bibliothekspakete. In beiden Fällen haben Sie Probleme.

  • Benennung nach einem Einbau-: Sie kann es nicht importieren können, wie Sie
  • Namensgebung nach einem Site-Paket sehen: Sie nicht auf die Website Paket importieren/verwenden Sie es in Ihrem Modul
Verwandte Themen