2012-06-01 2 views
1

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

Это мой код:

import httplib 
import json 

urlBase = 'amoeba.im' 
token = False 
username = raw_input('Username? ') 

connection = httplib.HTTPConnection(urlBase) 

def get(url): 
    connection.request("GET", url) 
    response = connection.getresponse() 
    print response.status, response.reason 
    print response.read(); 
    if token == False: 
     token = response.read() 
     token = token.split('"token":"')[1] 
     token = token.split('","')[0] 
     print token 

get('/api/login?username=' + username) 

get('/api/rooms/join?room=#lobby&token=' + token) 

get('/api/postmessage?message=hello%20world&token=' + token) 

connection.close() 

Вот терминал вывода:

Tyler-Keohanes-MacBook-Pro:~ tylerkeohane$ clear && '/usr/bin/pythonw' '/Users/tylerkeohane/Desktop/chatbot.py' 
Username? TgwizBot 
200 OK 
{"success":true,"username":"TgwizBot","token":"103f6a2809eafb6","users":[{"username":"razerwolf","seen":1338582178260},{"username":"tonynoname","seen":1338582178028},{"username":"arrum","seen":1338582177804},{"username":"Valerio","seen":1338582177504},{"username":"Tgwizman","seen":1338582177258},{"username":"tonynoname2","seen":1338582178004},{"username":"TgwizBot","seen":1338582182219}],"time":1338582182219} 
Traceback (most recent call last): 
    File "/Users/tylerkeohane/Desktop/chatbot.py", line 21, in <module> 
    get('/api/login?username=' + username) 
    File "/Users/tylerkeohane/Desktop/chatbot.py", line 15, in get 
    if token == False: 
UnboundLocalError: local variable 'token' referenced before assignment 
Tyler-Keohanes-MacBook-Pro:~ tylerkeohane$ 

Может кто-нибудь помочь? :(

+1

Возможный дубликат [UnboundLocalError в Python] (http://stackoverflow.com/questions/9264763/unboundlocalerror-in-python) – senderle

+0

Я добавлю, что если вы google «unboundlocalerror», [это] (http://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python/) - это первый результат. – senderle

ответ

6

Ключом здесь:

UnboundLocalError: local variable 'token' referenced before assignment 

Вы должны объявить token как глобальный:

def get(url): 
    global token 
    ... 

Вы также можете рассмотреть возможность избежать глобальных переменных, поскольку они, как правило, рассматривается как Плохая практика

1

В вашей функции вы назначаете token, поэтому для этой функции она считается локальной. Как указано в сообщении об ошибке s, вы пытались использовать его, прежде чем что-либо в нем.

token, который вы указали вне функции, является «скрытой» локальной переменной, поэтому она недоступна.

Чтобы сделать его назначаемым в вашей функции, поставьте global token сразу после строки def.

Но глобальные переменные обычно являются признаком плохого дизайна. Вместо этого вы должны, вероятно, передать token в функцию в качестве аргумента.

Вы найдете жизнь намного проще, если вы просто используете модуль requests.

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