python - Asyncio 可下标问题
问题描述
我正在尝试使用asyncio
库向某个 url 发出请求调用,但我正在检索错误TypeError: 'coroutine' object is not subscriptable
provider = []
def get_tasks(session):
tasks = []
for number in list(american['mobile_number'].values):
url = 'https://api.telnyx.com/v1/phone_number/1' + number
loop = asyncio.get_event_loop()
tasks.append(loop.create_task(session.get(url, ssl=False)))
return tasks
async def get_carrier():
async with aiohttp.ClientSession() as session:
tasks = get_tasks(session)
responses = await asyncio.gather(*tasks)
for response in responses:
provider.append(await response.json()['carrier']['name'])
asyncio.get_event_loop().run_until_complete(get_carrier())
错误:
TypeError: 'coroutine' object is not subscriptable
解决方案
因此,作为一个例子,我会避免使用两个异步循环,而只是做类似的事情。
import asyncio
import aiohttp
import aiohttp.client_exceptions
async def get_carrier():
async with aiohttp.ClientSession() as session:
for number in ['6613686502', '5166100971', '4436029240', '5707018841', '7049668597']:
url = 'https://api.telnyx.com/v1/phone_number/1' + number
async with session.get(url, ssl=False) as response:
try:
resp_json = await response.json()
print(f"{number}, {resp_json['carrier']['name']}")
except aiohttp.client_exceptions.ContentTypeError as e:
print(f"{number}, Unable to find data")
asyncio.get_event_loop().run_until_complete(get_carrier())
输出 我不确定 api 是否存在限制并且轮询速度太快,因为我得到的结果不一致。
6613686502, ONVOY, LLC - CA
5166100971, Unable to find data
4436029240, Unable to find data
5707018841, Unable to find data
7049668597, ONVOY, LLC - NC
推荐阅读
- elasticsearch - 将 azure 活动目录与 NEST/Elasticsearch.net 一起使用
- java - 为什么静态变量返回空,即使我已经在其他类中设置它?
- flutter - 方法 'map' 没有为类型 'Function' 定义。尝试将名称更正为现有方法的名称,或定义名为“map”的方法
- mongodb - 将 Mongodb 中的旧数据移动到其他 Mongodb 服务器
- amazon-web-services - 每当尝试通过 gitlab 使用 cdk 部署后端时都会出错,在本地它将按预期工作
- javascript - 如何在 Spring Boot 中将对象列表从控制器传递到 JavaScript 函数?
- reactjs - 如何将标头组件添加到私有路由组件
- javascript - react-multi-date-picker 仅选择有限数量的日期问题
- r - 尝试保存工作区,但出现“访问被拒绝”错误
- java - 如何为 FireStore 内容创建深层链接?