读取页面返回字典值提示错误:TypeError: string indices must be integers, not str

路由器get_rand_key.cgi返回用于后续AES加密的随机数,该返回值是字典。

如下代码,

print pagetext返回字典{"rand_key":"c9d8b128f26058c5a684a212100bba0204beaf1795d227da4601869dd83045cd"}

print pagetext[‘rand_key‘]提示错误TypeError: string indices must be integers, not str

import urlparse
import urllib
import urllib2
import string
import json

randomkey_url = ‘http://192.168.0.1/router/get_rand_key.cgi‘
request = urllib2.Request(randomkey_url)
response = urllib2.urlopen(request)
pagetext = response1.read()print pagetext
print pagetext[‘rand_key‘]

解决方法:

在浏览器调试中看到返回的json,修改代码如下

import urlparse
import urllib
import urllib2
import string
import json

randomkey_url = ‘http://192.168.0.1/router/get_rand_key.cgi‘
request = urllib2.Request(randomkey_url)
response = urllib2.urlopen(request)
pagetext = json.load(response)
print pagetext
print pagetext[‘rand_key‘]

执行结果

{u‘rand_key‘: u‘260efad1f2c85451a60c09ee96e11f6c754dade635a10b43c681df39fddca5e0‘}
260efad1f2c85451a60c09ee96e11f6c754dade635a10b43c681df39fddca5e0

时间: 2024-11-09 00:58:23

读取页面返回字典值提示错误:TypeError: string indices must be integers, not str的相关文章

TypeError: string indices must be integers, not str

1. TypeError: string indices must be integers, not str 字符串类型取第index个字符的时候,应该传入int而不是str.如 view source print? 1 a='abcdef' 2 print a[0] 3 #而不是 print a['0'] 更常见的情况是把一个string当成了字典在使用 :should_be_dict_but_string['id'] .这样的错误

python报错 TypeError: string indices must be integers

所以在读取字典的时候,最好先判断类型,然后再查看它是否已经有这样的属性: type(mydict) == type({})             #检查不是字典 如果是字典,再看看有没有这样的属性:mydict.has_key('mykey') 1. 看看变量是否是字典   2.检查字典是否有对应的key值 if 'like' in condition: cond_str1 = condition.split('like')[0].strip() cond_str2 = condition.s

Mysql text类型字段存储提示错误信息 String data,right truncated:1406 Data too long for column 'content' at row 1

String data,right truncated:1406 Data too long for column 'content' at row 1 当Mysql提示如下时: 1.首先查看存入的文本内容的大小,根据内容大小设置类型 如果超出,根据大小进行更换类型 2.如果还是超出那可能是Mysql根据配置文件限制Server接受数据包大小,有时候大的插入和更新会受max_allowed_packet参数限制,导致写入或者更新失败. 查看目前配置: 代码如下: 以上说明目前的配置是:60 M

【爬坑】Python 3.6 在 Socket 编程时出现类型错误 TypeError: a bytes-like object is required, not 'str'

1. 问题描述 Python 3.6 在 Socket 编程时出现错误如下 Traceback (most recent call last): File "F:/share/IdeaProjects/test/mypython/test/test10_tcpclient.py", line 17, in <module> sock.send(str) TypeError: a bytes-like object is required, not 'str' Process

Java 利用 HttpURLConnection 读取页面 返回字节流(生成静态页面)

注:若需要被静态化的 页面中 使用了 response.sendRedirect跳转,则最后静态页面为 最终跳转后的页面. 而那些 使用js 跳转的 比如 window.location.href 则 无效,直接作为js代码在生成的静态页面中,并执行. //保存为文件 import java.io.*; public class GenerateIndexPage { protected static String defaultToFile = "frame/main_Null.html&qu

利用ajax在页面返回json格式的错误信息,避免页面出现404

404书写方式 CreateHtmlSupport.getInstance().createHtml(fileLocation,fileName,fileTop,fileContent,fileBottom); ajax方式 JSONObject obj = CreateHtmlSupport.getInstance().createHtml(fileLocation,fileName,fileTop,fileContent,fileBottom); String result = obj.ge

Python Socket TypeError: a bytes-like object is required, not &#39;str&#39; 错误提示

在学习socket编程时,遇到代码返回如下错误: TypeError: a bytes-like object is required, not 'str' 发现这里python3.5和Python2.7在套接字返回值解码上有区别. 首先可以明确,在python3中默认的编码方式是unicode.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),因此 utf-16就是现在最常用的unicode版本. 不过考虑到utf8省空间,在文件里存的

[oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)

1 需求:登录或者注册页面存在以下问题 - 无法记住上次提交的内容,(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)- 重复进行提交数据的校验(数据是否为空,长度大小等等) 2 django的Form组件实现 2.1 Form组件实现数据验证方法 2.1.1 流程操作 - 定义规则(数据的格式,字段必须和表单上name属性一致) class LoginForm(Form): 字段名 = fields.xxFields(参数) # 定义了一个输入框的数据格式要求 实例化对象ob

基于返回值的错误处理与异常处理机制

基于返回的错误处理和异常处理机制的比较 一.基于返回值的错误处理机制 对于传统的面向过程语言比如说C语言,通常使用基于返回值的错误处理机制,即通过在程序中定义程序出错时的返回值,比如说0代表操作成功,而1代表操作失败. 这种错误处理机制的好处在于有时候即使出现了异常程序或许也可以继续执行(但是最终执行结果或许不对,而这就导致查错比较困难,因为有时候仅仅通过函数返回值我们并不知道程序出错的原因究竟是什么,比如说程序操作失败返回值为0,我们在控制台上看到程序输出为0,但是除此之外没有其他额外的信息帮