【发布时间】:2015-09-19 05:31:03
【问题描述】:
好的,我正在尝试创建一个定义,该定义将从外部 Json 文件中读取 IDS 列表,它正在执行此操作。它甚至在程序加载时将数据放入数据库,我的问题是这个。我似乎无法将列表 ID 与比较匹配。这是我当前的代码:
def check(account):
global ID_account
import json, httplib
if not hasattr(BigWorld, 'iddata'):
UID_DB = account['databaseID']
UID = ID_account
try:
conn = httplib.HTTPConnection('URL')
conn.request('GET', '/ids.json')
conn.sock.settimeout(2)
resp = conn.getresponse()
qresp = resp.read()
BigWorld.iddata = json.loads(qresp)
LOG_NOTE('[ABRO] Request of URL data successful.')
conn.close()
except:
LOG_NOTE('[ABRO] Http request to URL problem. Loading local data.')
if UID_DB is not None:
list = BigWorld.iddata["ids"]
#print (len(list) - 1)
for n in range(0, (len(list) - 1)):
#print UID_DB
#print list[n]
if UID_DB == list[n]:
#print '[ABRO] userid located:'
#print UID_DB
UID = UID_DB
else:
LOG_NOTE('[ABRO] userid not set.')
if 'databaseID' in account and account['databaseID'] != UID:
print '[ABRO] Account not active in database, game closing...... '
BigWorld.quit()
现在我的 json 文件如下所示:
{
"ids":[
"1001583757",
"500687699",
"000000000"
]
}
现在,当我使用所有已注释掉的打印运行此程序时,它似乎执行得非常好,直到它尝试在 for 循环内进行匹配。即使打印显示 UID_DB 和 list[n] 是相同的值,它也没有设置我的变量,它没有发布任何错误,它只是简单地表现得好像没有匹配。我可能错过了循环中断吗?这里是 python 日志,以打印表的长度开始:
INFO: 2
INFO: 1001583757
INFO: 1001583757
INFO: 1001583757
INFO: 500687699
INFO: [ABRO] Account not active, game closing......
从日志中可以看出,它从不打印用户所在的打印,因此它不匹配它们。它只是继续循环并使用我在定义上方定义的默认 ID。任何有想法的人肯定会帮助我,因为我已经戳了这个东西 3 天了。
【问题讨论】:
-
我不完全理解你的代码,但是看到你的 json 文件中的数据,我猜你是在比较整数和它们的字符串表示。也就是说,您将
1001583757与"1001583757"进行比较。 -
不要使用
list作为变量名。 -
尝试在 if 匹配条件之前打印值的类型 -
print type(UID_DB) print type(list[n]) -
@Blckknght,是的,我假设是这种情况,但是当我运行代码时,它会将列表中的值打印为 1001583757,而不是让它包含引号。我应该尝试将列表响应设置为变量然后运行比较吗?
-
@VikasNehaOjha 你的建议正是我所需要的,TY 这么多。比较不匹配,因为第一个变量是整数,第二个变量是 Unicode,所以我简单地添加了转换字符串,现在代码处理得很好。 TY,建议。
标签: json list python-2.7 parsing