2013-12-12 36 views
5

Myślę, że mam problemy z importowaniem pylab. Podobny błąd występuje, gdy importuję numpy. Oto mój kodAttributeError: Obiekt "moduł" nie ma atrybutu "małe litery"

from math import radians, sin, cos 
from pylab import plot, xlabel, ylabel, title, show 

v0=input("Enter v0 (m/s)...") 
alpha0=input("enter alpha0 (degrees)...") 
g=input("Enter g (m/s^2)..") 

radalpha0=radians(alpha0) 
t_inc=0.01 
t=0 
i=0 
x=[] 
y=[] 

x.append(v0*cos(radalpha0)*t) 
y.append(v0*sin(radalpha0)*t-0.5*g*t*t) 

while y[i]>=0: 
    i=i+1 
    t=t+t_inc 
    x.append(v0*cos(radalpha0)*t) 
    y.append(v0*sin(radalpha0)*t-0.5*g*t*t) 

xlabel('x') 
ylabel('x') 
plot(x,y) 
title('Motion in two dimensions') 
show() 

uzyskać to wyjście

Traceback (most recent call last): 
    File "2d_motion.py", line 2, in <module> 
    from pylab import plot, xlabel, ylabel, title, show 
    File "/usr/lib64/python2.7/site-packages/pylab.py", line 1, in <module> 
    from matplotlib.pylab import * 
    File "/usr/lib64/python2.7/site-packages/matplotlib/__init__.py", line 151, in <module> 
    from matplotlib.rcsetup import (defaultParams, 
    File "/usr/lib64/python2.7/site-packages/matplotlib/rcsetup.py", line 19, in <module> 
    from matplotlib.fontconfig_pattern import parse_fontconfig_pattern 
    File "/usr/lib64/python2.7/site-packages/matplotlib/fontconfig_pattern.py", line 28, in <module> 
    from pyparsing import Literal, ZeroOrMore, \ 
    File "/usr/lib/python2.7/site-packages/pyparsing.py", line 109, in <module> 
    alphas = string.lowercase + string.uppercase 
AttributeError: 'module' object has no attribute 'lowercase' 

Czy istnieje jakiś problem ze składnią?

Używam python2.7 na fedora18.

+0

Przy okazji mam taki sam efekt, gdy piszę z importu pylab * w konsoli Pythona – orknaydn

+0

Co otrzymasz po wpisaniu 'string' Importuj, a następnie' print ciąg .__ file__' na konsoli? – DSM

+0

Dostaję linię; string.pyc – orknaydn

Odpowiedz

6

Po krótkiej dyskusji w komentarzach okazało się (jak to zwykle bywa, gdy wbudowane moduły nagle wydają się dawać AttributeErrors), że problem polegał na tym, że inny moduł o nazwie string zacierał wbudowany moduł.

Jednym ze sposobów na sprawdzenie tego jest przyjrzenie się atrybutem modułu __file__, lub po prostu spojrzeć na samego repr:

>>> print string 
<module 'string' from '/usr/lib/python2.7/string.pyc'> 

jeśli from nie wskazuje na właściwym miejscu, masz otrzymałem niewłaściwy moduł do odczytu.

Rozwiązanie: usuń/zmień nazwę plików, które mogą być niebezpieczne: string.py/string.pyc.

+0

Mam ten sam problem i twoja odpowiedź mi pomogła. Jednak uważam to za nieco niesatysfakcjonujące. Niedozwolone nadawanie nazw zwyczajowych, takich jak "string", do dowolnych modułów * sub * wydaje się być dość silnym i niewygodnym ograniczeniem. – flonk

Powiązane problemy