2013-02-14 6 views
0

Прошу прощения, если это базовое исправление и длина сообщения, но я новичок в Python. Я также включил большой фрагмент сценария для контекстных целей.Python - строковые индексы должны быть целыми числами

Я использую сценарий, чтобы вытащить данные сканирования из JSON в базу данных MySQL. Сценарий работал нормально, пока не было выпущено обновление.

Теперь, когда я запускаю сценарий, я получаю ошибку:

результата в resultc [ 'ответ'] [ 'результаты']: TypeError: строковые индексы должны быть целыми

До этого обновления I знал типы данных для каждого значения, но это изменилось, и я не могу определить, где именно. Есть ли способ конвертировать каждое значение для распознавания в виде строки?

# Send the cumulative JSON and then populate the table 
cumresponse, content = SendRequest(url, headers, cumdata) 
resultc = json.loads(content) 
off = 0 
print "\nFilling cumvulndata table with vulnerabilities from the cumulative database. Please wait..." 
for result in resultc['response']['results']: 
    off += 1 
    print off, result 
    cursor.execute ("""INSERT INTO cumvulndata(
offset,pluginName,repositoryID, 
severity,pluginID,hasBeenMitigated, 
dnsName,macAddress,familyID,recastRisk, 
firstSeen,ip,acceptRisk,lastSeen,netbiosName, 
port,pluginText,protocol) VALUES 

(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,(FROM_UNIXTIME(%s)),%s,%s,(FROM_UNIXTIME(%s)),%s,%s, %s,%s)""" , (off,result["pluginName"],result["repositoryID"]),result["severity"]), 
result["pluginID"]), result["hasBeenMitigated"]),result["dnsName"], 
result["macAddress"],result["familyID"]),result["recastRisk"]), 
result["firstSeen"],result["ip"],result["acceptRisk"],result["lastSeen"], 
result["netbiosName"],result["port"],result["pluginText"],result["protocol"])) 
+0

ошибка говорит вам, что 'resultc [«ответ»]' является «String» и что вы не можете ссылаться на индекс «results» (потому что строки являются технически кортежем символов). Пожалуйста, опубликуйте вывод 'print (resultc)' –

+0

. Я опубликую выходные утром, спасибо. – Ben

+0

попробуйте найти свой список, а затем найдите целое число для его индексации. – monkut

ответ

1

Поместите это перед тем, цикл работы, какой объект является строкой (я предполагаю, что это, вероятно, второй один)

print type(resultc) 
print type(resultc['response']) 
+1

. Я попробую это утром и опубликую результат, мой сервер отключился для обслуживания. – Ben

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