Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求后tensorflow服务:要解压缩的值太多(预期为2个)_Python_Api_Python Requests - Fatal编程技术网

Python 请求后tensorflow服务:要解压缩的值太多(预期为2个)

Python 请求后tensorflow服务:要解压缩的值太多(预期为2个),python,api,python-requests,Python,Api,Python Requests,我用我的模型设置了tensorflow运行服务,但当我尝试执行post请求时,它会返回以下错误(get request work): 我的数据是一个数组: [array([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0

我用我的模型设置了tensorflow运行服务,但当我尝试执行post请求时,它会返回以下错误(get request work):

我的数据是一个数组:

 [array([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
       dtype=int32),
 array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32]

代码中有两个独立的问题。一个与有效负载有关,另一个与您使用
请求的方式有关。post

请求使用
requests.post
,就像
requests.request
和其他类似函数一样,返回
Response
类()的单个实例。因此,要修复错误,您需要从

res, res2 = requests.post(...


现在,通常如果您尝试将一件事情解包为两个变量,您会得到一个更明确的错误,即没有足够的值来解包:

>a,b=[1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:没有足够的值来解包(预期值为2,实际值为1)
您得到的错误实际上是相反的-您有太多的值要解包。这就是原因

请求返回的
Response
类。post
定义了一个
方法(self)
方法(),该方法允许您以块的形式迭代响应,而不是一次读取所有响应。因此,当您执行
res,res2=response
时,Python将尝试使用
\uuuuu iter\uuuu
实现为您解包响应。如果您的响应中有两个以上的块,那么您将没有足够的变量来处理其他块,因此会出现错误“值太多,无法解包”

这种行为的简单演示:

>>类X():
...     定义(自我):
...             对于范围(5)中的i:
...                     产量一
...
>>>x=x()
>>>a,b=x
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:要解压缩的值太多(应为2个)
>>>名单(十)
[0, 1, 2, 3, 4]
有效载荷 当您将
数据
关键字参数传递给
requests.post
时,它假定您要对其进行表单编码()。您应该传递一个字典或一个元组列表,但您拥有的是一个数组列表,它根本不是一个表单,所以您不想对其进行表单编码

因此,当您传递
(data=list\u of\u array)
时,库希望第一个元素是包含两个元素的元组。相反,您有一个包含更多元素的数组,这再次导致相同的错误:太多的值无法解包

相反,您要做的是将其作为JSON或字符串发送。通常,您必须按照文档进行操作

导入json
有效负载=[np.random.randint(2,大小=30).重塑(3,10),np.random.randint(2,大小=30).重塑(3,10)]
res=requests.post('/',data=json.dumps(有效负载))#将其作为字符串传递
res=requests.post('/',json=payload)#或者让库序列化它
不幸的是,您将遇到
np.array
不可序列化的问题,因此必须先为序列化做好准备。根据,您只需在
np.array
上调用
.tolist()
,即可将其序列化为整数列表

因此,最终的解决方案

导入json
有效负载=[np.random.randint(2,大小=30).重塑(3,10),np.random.randint(2,大小=30).重塑(3,10)]
#将两个np.array转换为list
有效负载=[payload[0].tolist(),有效负载[1].tolist()]
#还是这样
有效负载=[arr.tolist()表示arr in数据]
#现在,有效负载是可序列化的
res=requests.post('/',data=json.dumps(有效负载))#将其作为字符串传递
res=requests.post('/',json=payload)#或者让库序列化它

查看错误消息,我发现您为requests.post响应分配了两个变量res,res2,返回值超过2个

#for example 
var1, var2 = [1, 2, 3]
#this will raise the same error as your's 
要解决这个问题,您需要像下面这样索引您的响应

res, res2 = requests.post('http://url:port/v1/models/colbert:predict', 
    data=sentence_input)[:2]
print(res.status_code, res.reason)

如果对post请求的响应返回一个列表,索引将解决您的问题

res,res2
您有两个变量吗?在
requests.post
中,payad应该是dict而不是array@Ajay,那么有效载荷应该是什么样子?
res = requests.post(
#for example 
var1, var2 = [1, 2, 3]
#this will raise the same error as your's 
res, res2 = requests.post('http://url:port/v1/models/colbert:predict', 
    data=sentence_input)[:2]
print(res.status_code, res.reason)