You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求执行报错TypeError: an integer is required(got type str),URL列表下载功能故障求助

问题排查与解决

嘿,我来帮你拆解这个问题的根源,以及给出修复方案:

错误原因分析

你遇到的TypeError是因为误用了os.open()函数——这个是Python底层的文件操作工具,它要求第一个参数是文件路径字符串,第二个参数是整数类型的打开标志(比如os.O_RDONLYos.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)}")

关键改动说明

  1. 补上import requests:否则代码会先触发NameError,你之前的错误没走到这一步是因为第4行先报错了
  2. 替换os.open()loc.content.decode().splitlines()
    • loc.content是字节类型,用decode()转换成字符串(默认用UTF-8编码,可根据实际情况指定编码)
    • splitlines()会把文本按换行符分割成列表,每个元素就是一个独立的URL
  3. 添加空行判断和异常捕获:避免因为空行或者无效URL导致程序直接崩溃,提升代码的健壮性

内容的提问来源于stack exchange,提问作者user18236826

火山引擎 最新活动