繁体   English   中英

Python错误。 我不明白我在做什么错

[英]Python error. I don't understand what I'm doing wrong

我迷失了自己在做错什么...我已经在网上搜索了几个小时,试图重新格式化我的代码,但现在我感到被困住了。

这是我的代码:

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$ 

有人可以帮忙吗? :(

线索在这里:

UnboundLocalError: local variable 'token' referenced before assignment

您需要将token声明为全局变量:

def get(url):
    global token
    ...

您可能还需要考虑避免使用全局变量,因为它们通常被视为不好的做法。

您在函数中分配了token ,因此将其视为该函数的局部变量。 如错误消息所示,您尝试在其中没有任何东西之前使用它。

您在函数外部声明的token被局部变量“隐藏”,因此无法访问。

要使其在您的函数中可分配,请将global token放在def行之后。

但是全局变量通常是不良设计的标志。 相反,您可能应该将token作为参数传递给函数。

如果仅使用requests模块,您会发现生活变得容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM