Python 3.x 使用asyncio/aiohttp返回404响应时遇到问题 导入时间 导入异步 进口aiohttp async def的名称是否可用: 与s.get异步(“https://twitter.com/%s%name)作为res: 如果res.raise_for_status==404: 打印(“%s可用!”%name) 返回名称 异步def检查所有名称(名称): 与aiohttp.ClientSession异步(raise_for_status=True)为s: 任务=[] 对于名称中的名称: task=asyncio.create_任务(名称是否可用) tasks.append(任务) return wait asyncio.gather(*任务) def main(): 打开('names.txt')作为in_文件,打开('available.txt','w')作为out_文件: names=[name.strip()表示\u文件中的名称] 开始时间=time.time() 结果=asyncio.get_event_loop()。运行_直到完成(检查所有名称) 结果=[i表示结果中的i,如果i] out_file.write('\n'.join(结果)) 打印(f'[

Python 3.x 使用asyncio/aiohttp返回404响应时遇到问题 导入时间 导入异步 进口aiohttp async def的名称是否可用: 与s.get异步(“https://twitter.com/%s%name)作为res: 如果res.raise_for_status==404: 打印(“%s可用!”%name) 返回名称 异步def检查所有名称(名称): 与aiohttp.ClientSession异步(raise_for_status=True)为s: 任务=[] 对于名称中的名称: task=asyncio.create_任务(名称是否可用) tasks.append(任务) return wait asyncio.gather(*任务) def main(): 打开('names.txt')作为in_文件,打开('available.txt','w')作为out_文件: names=[name.strip()表示\u文件中的名称] 开始时间=time.time() 结果=asyncio.get_event_loop()。运行_直到完成(检查所有名称) 结果=[i表示结果中的i,如果i] out_file.write('\n'.join(结果)) 打印(f'[,python-3.x,python-asyncio,aiohttp,Python 3.x,Python Asyncio,Aiohttp,此行不正确: import time import asyncio import aiohttp async def is_name_available(s, name): async with s.get("https://twitter.com/%s" % name) as res: if res.raise_for_status == 404: print('%s is available!' % name)

此行不正确:

import time
import asyncio
import aiohttp

async def is_name_available(s, name):
    async with s.get("https://twitter.com/%s" % name) as res:
        if res.raise_for_status == 404:
            print('%s is available!' % name)
            return name

async def check_all_names(names):
    async with aiohttp.ClientSession(raise_for_status=True) as s:
        tasks = []
        for name in names:
            task = asyncio.create_task(is_name_available(s, name))
            tasks.append(task)
        return await asyncio.gather(*tasks)

def main():    
    with open('names.txt') as in_file, open('available.txt', 'w') as out_file:        
        names = [name.strip() for name in in_file]
        start_time = time.time()
        results = asyncio.get_event_loop().run_until_complete(check_all_names(names))
        results = [i for i in results if i]
        out_file.write('\n'.join(results))
        print(f'[ <? ] Checked {len(names)} words in {round(time.time()-start_time, 2)} second(s)')

if __name__ == '__main__':
    main()
raise\u for\u status
是一种方法,因此您应该调用它,而不是将其与数字进行比较(该数字将始终返回false)。在您的情况下,您首先不想调用
raise\u以获取\u status
,因为您不想在遇到404时引发异常,而是要检测它。要检测404,您只需编写以下代码:

        if res.raise_for_status == 404:

还请注意,您不想指定
raise\u for_status=True
,因为如果
有机会运行,它将在
之前引发404的异常。

在您得到的优秀答案的基础上,您可以使用
asyncio.run(检查所有\u名称)
在未明确获取事件循环的情况下,请不要通过破坏您的帖子为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下分发该内容的不可撤销的权利(即,无论您未来的选择如何)。根据堆栈交换策略,该帖子的非故意破坏版本是已分发的版本。因此,任何故意破坏行为都将被还原。如果您想了解有关删除帖子的更多信息,请参阅:
        if res.status == 404: