请求执行报错TypeError: an integer is required(got type str),URL列表下载功能故障求助
问题排查与解决
嘿,我来帮你拆解这个问题的根源,以及给出修复方案:
错误原因分析
你遇到的TypeError是因为误用了os.open()函数——这个是Python底层的文件操作工具,它要求第一个参数是文件路径字符串,第二个参数是整数类型的打开标志(比如os.O_RDONLY、os.O_WRONLY这类常量)。但你传入的是loc.content(HTTP响应返回的字节数据)和字符串"rt",完全不符合函数的参数规则,自然会抛出类型错误。
而且你的需求是处理从URL获取的文本列表,根本不需要用os.open()来操作——咱们直接把响应内容转换成字符串,再按行分割就能拿到目标URL列表了。
修正后的代码
首先别忘了补上缺失的requests导入(你的代码里漏了这行),然后调整核心逻辑:
import os import requests # 补上缺失的导入 # 获取URL列表的响应 loc = requests.get("https://theipaarchive.tk/listofipa.txt") # 将字节内容解码为字符串,再按行分割成URL列表 listofipa = loc.content.decode().splitlines() # 遍历每个URL获取内容 for line in listofipa: # 跳过空行,避免无效请求 if not line.strip(): continue try: r = requests.get(line.strip()) # 这里可以添加处理响应内容的逻辑,比如保存到文件等 print(f"成功获取 {line} 的内容") except requests.exceptions.RequestException as e: print(f"请求 {line} 失败: {str(e)}")
关键改动说明
- 补上
import requests:否则代码会先触发NameError,你之前的错误没走到这一步是因为第4行先报错了 - 替换
os.open()为loc.content.decode().splitlines():loc.content是字节类型,用decode()转换成字符串(默认用UTF-8编码,可根据实际情况指定编码)splitlines()会把文本按换行符分割成列表,每个元素就是一个独立的URL
- 添加空行判断和异常捕获:避免因为空行或者无效URL导致程序直接崩溃,提升代码的健壮性
内容的提问来源于stack exchange,提问作者user18236826




