2015-04-22 5 views
0

Я делаю приложение с Yo api в python (https://github.com/parthanium/YoPy), и я получаю очень странную ошибку.Почему я получаю AttributeError?

Итак, я клонировал репозиторий в моей рабочей области, и я создал следующий файл (test.py), который работает, как ожидалось, когда я бегу «питона test.py»:

import yopy 

token = "secret" 
username = "testUser" 
link = "https://github.com/parthanium/YoPy" 

yo = yopy.Yo(token) 
print yo 
print yo.number() 

Теперь проблема:

Я проект, который включает в себя предыдущий проект (Yo апите в Python) как мерзавец субмодуля:

yo/ 
├── README.md 
├── gitmodules 
│   └── yopy 
│    ├── LICENSE 
│    ├── README.md 
│    └── yopy.py 
└── yo.py 

yo.py файл имеет следующее:

import sys 
sys.path.append("gitmodules/yopy") 
import yopy 
import struct 

token = "secret" 
username = "testUser" 
link = "https://github.com/parthanium/YoPy" 

yo = yopy.Yo(token) 
print yo 
print dir(yo) 
print yo.number() 

и я получаю следующий вывод сообщения об ошибке при запуске:

<yopy.Yo object at 0x10cc29190> 
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_session', 'token', 'user', 'yo', 'yo_all'] 
Traceback (most recent call last): 
    File "yo.py", line 13, in <module> 
    print yo.number() 
AttributeError: 'Yo' object has no attribute 'number' 

Почему я получаю эту ошибку? Dir (yo) выводит странные атрибуты, такие как «yo_all» и «yo», «user» ...

Редактировать: Tried 'print yopy. файл 'и результат был https://gist.github.com/pedrorijo91/4fb4defe7a7c2d8a2fdc (спасибо @abarnert)

+0

Что вы видите при запуске (реж yo.yo)? –

+0

@HackSaw Я бы получил: ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__', '__getattribute__', '__hash__', '__init__ ',' __new__ ',' __reduce__ ',' __reduce_ex__ ',' __repr__ ',' __self__ ',' __setattr__ ',' __sizeof__ ',' __str__ ',' __subclasshook__ ',' im_class ',' im_func ',' im_self '] – pedrorijo91

+0

Пожалуйста, проверьте отступ для /gitmodules/yopy/yopy.py. Это звучит странно, я знаю, но я столкнулся с этим сценарием несколько раз. – JimmyK

ответ

2

Проблема почти наверняка, что у вас есть что-то еще по имени yopy.py, yopy.pyc или yopy в вашем sys.path, скорее всего, в текущем рабочем каталоге, вы находитесь пытаясь запустить это. Это может быть старая версия той же библиотеки или какая-либо тестовая программа, которую вы написали, чтобы протестировать библиотеку или какой-то другой проект с тем же именем.

Теперь ваша sys.path.append("gitmodules/yopy") действительно добавляет правильный каталог для поиска импортер пути, но это добавляет его в конце, не начала. Итак, если есть ./yopy.py, а также ./gitmodules/yopy/yopy.py, это первый, который Python собирается импортировать.

Вы можете увидеть, что импортировано, сделав print yopy.__file__. Или, лучше, import inspect, а затем print inspect.getsourcefile(yopy).

Предполагая, что это проблема, исправить это, чтобы избавиться от другой вещи с конфликтующим именем. (Вы могли вместо этого просто изменить sys.path.append(…) к sys.path.insert(0, …), но с другой yopy вокруг только собирается привести к большей путанице ...)

+0

Вау, это было странно! Если я использую sys.insert(), он работает хорошо, но sys.append() терпит неудачу. Но у меня нет файлов * .pyc в моем каталоге, так как может append() все еще не удается? – pedrorijo91

+0

@ pedrorijo91: не понимаю. Вы должны были распечатать '__file__' или' getsourcefile' и получить путь, иначе вы не смогли бы внести изменения в свой вопрос, который отображает содержимое того, что на этом пути. Итак, как вы не знаете, что такое путь? – abarnert

+0

извините, неправильно поймите свои слова! все хорошо сейчас! большое спасибо – pedrorijo91

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