首页 > 解决方案 > 如果数据在列表中,如何过滤请求中的数据?

问题描述

我有一个名为 sampleId 的列表sampleid_list,现在我想做一个请求,如果 SampleId 出现在sampleid_list

这是我的代码:

import requests

sampleid_list = [592785, 592787, 592789, 592790, 592791, 592795, 592796]

headers = {'Authorization': 'Bearer ' + token}
proxies = {'https': 'proxy.services.dekra.com:8080'}
url1 = 'https://**-**-***.***.com/odata/Results'

params_1 = (
    ('$filter','SampleId in ', sampleid_list),
    ('$select', 'ResultId, CompletedOn, EnteredValue, EnteredOn, TextValue\n'),
    ('$count', 'true'),
    ('$expand', 'Test($expand=Sample($select=SampleId)), Test($expand=TestType($select=Name)), Test($select=SpecificationStatus), ResultType($select=Name), Unit($select=Name)\n'),
)

response_1 = requests.get(url1, headers=headers, proxies=proxies, params=params_1)
r1 = response_1.json()
print(r1)

现在让事情变得困难的SampleId不是在基本 url 中/Results而是从/Sample

我当前的输出:

Traceback (most recent call last):
  File "c:/data/GORGE/Desktop/VSprojects/EnergyZero/EnergyZero_API.py", line 156, in <module>
    response_1 = requests.get(url1, headers=headers, proxies=proxies, params=params_1)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 459, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 314, in prepare
    self.prepare_url(url, params)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 432, in prepare_url
    enc_params = self._encode_params(params)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 97, in _encode_params
    for k, vs in to_key_val_list(data):
ValueError: too many values to unpack (expected 2)

标签: pythonlistpython-requestspostman

解决方案


你的错误:

params应该是一个dict或一个list元组。每个元组应该包含 2 个元素 (key,val) 但是params_1是一个tuple元组并且你有超过 2 个元素。

错误演示(第三个请求将抛出您在代码中得到的异常)

import requests

url = 'https://w3schools.com/python/demopage.php'

x = requests.get(url, params = {"model": "Mustang"})
print(x.status_code)

y = requests.get(url, params = [("model", "Mustang")])
print(y.status_code)

bug = requests.get(url, params = (("model", "Mustang","bug")))

print(bug)

推荐阅读