TypeError('不是一个有效的非字符串序列或映射对象',)

Posted

技术标签:

【中文标题】TypeError(\'不是一个有效的非字符串序列或映射对象\',)【英文标题】:TypeError('not a valid non-string sequence or mapping object',)TypeError('不是一个有效的非字符串序列或映射对象',) 【发布时间】:2015-11-06 11:48:28 【问题描述】:

我正在使用 aiohttp 获取请求从另一个 web api 下载一些内容 但我收到了:

exception = TypeError('not a valid non-string sequence or mapping object',)

以下是我要发送的数据。

data = "symbols=LGND-US&exprs=CS_EVENT_TYPE_CD_R(%27%27,%27now%27,%271D%27)"

如何解决?

我尝试了两种方式:

r = yield from aiohttp.get(url, params=data) # and
r = yield from aiohttp.post(url, data=data)

同时我可以使用以下方法获取数据:

r = requests.get(url, params=data) # and
r = requests.post(url, data=data)

但我需要异步实现。

如果我可以使用import requests 库而不是import aiohttp 来发出异步http 请求,还建议我采取一些方法,因为在许多情况下,aiohttp post & get 请求不起作用,但对于 requests.get &发布请求。

【问题讨论】:

【参考方案1】:

docs 使用字节(即“b”前缀)作为 data 参数。

r = await aiohttp.post('http://httpbin.org/post', data=b'data')

另外,params 参数应该是一个字典或一个元组列表。

【讨论】:

我尝试了上述解决方案,但现在我收到 Error getting inputs 405 您能详细说明一下吗?您的意思是 HTTP 错误 405(方法不允许)?您可能正在执行 POST 并且该页面只允许 GET,反之亦然。对于 GET,您需要使用 params 参数而不是数据,但它必须是我上面提到的字典或列表。 @miles82 要求在aiohttp PR #587放宽了

以上是关于TypeError('不是一个有效的非字符串序列或映射对象',)的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:不能将序列乘以“float”类型的非整数(python 2.7)

TypeError: ObjectId('') 不是 JSON 可序列化的

TypeError:mappingproxy 类型的对象不是 JSON 可序列化的

TypeError:ObjectId('')不是JSON可序列化的

TypeError:无效参数,不是字符串或列:pyspark UDF

TypeError:float() 参数必须是字符串或数字,而不是“期间”