2017-02-08 1 views
1

Я просто изучаю Python.Почему моя программа Python бросает исключение в зависимости от имени файла?

У меня есть файл со следующим содержанием

import datetime as dt 
import matplotlib.pyplot as plt 
from matplotlib import style 
import pandas as pd 
import pandas_datareader.data as web 

Если я называю этот файл csv2.py и называют:

python csv2.py 

... это работает. Но если я называю этот файл csv.py и запустить:

python csv.py 

Это вызывает это исключение:

C:\Git\algotrading [master ≡ +3 ~0 -0 !]> python csv.py 
Traceback (most recent call last): 
    File "csv.py", line 2, in <module> 
    import matplotlib.pyplot as plt 
    File "C:\Users\andrerpena\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\pyplot.py", line 29, in <module> 
    import matplotlib.colorbar 
    File "C:\Users\andrerpena\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\colorbar.py", line 34, in <module> 
    import matplotlib.collections as collections 
    File "C:\Users\andrerpena\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\collections.py", line 36, in <module> 
    import matplotlib.mlab as mlab 
    File "C:\Users\andrerpena\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\mlab.py", line 172, in <module> 
    import csv 
    File "C:\Git\algotrading\csv.py", line 2, in <module> 
    import matplotlib.pyplot as plt 
AttributeError: module 'matplotlib' has no attribute 'pyplot' 

Он взял меня, как 40 минут, чтобы выяснить проблему. Я имею в виду, что проблема связана с именем файла.

Почему это происходит?

+5

'csv' - это стандартный модуль, упакованный с Python, который' matplotlib' пытается импортировать. Вместо импорта стандартного модуля он импортирует * ваш * файл – Suever

+1

'csv' является стандартным модулем Python. Не вызывайте свой файл 'csv.py', дайте ему другое имя. – DyZ

+0

Спасибо. Я просто учился. Я этого не знал. –

ответ

2

Похоже, matplotlib.pyplot через различные потребности импорта mlab.py, который вызывает «импорт csv». Это должно найти файл (который не принадлежит вам), называемый csv, но поскольку вы переименовали свой файл в csv.py, он пытается импортировать это вместо этого, переопределяя требуемый импорт и испортив импорт для matplotlib.pyplot.

1

csv.py встроен в python и поэтому ограничен.

Если вы запустите интерпретатор python и попробуйте import csv, вам удастся без необходимости загружать что-либо новое.

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