You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取HTTP路径图片触发OSError的代码修改咨询

报错核心原因

Python 内置的open()函数仅能识别本地文件系统的绝对/相对路径,完全不支持解析http://、https://开头的网络资源地址。直接把网络URL传给open(),就会触发OSError: [Errno 22] Invalid argument的报错,和你当前遇到的问题完全匹配。

代码调整方案

要获取网络地址上的图片二进制内容,需要先通过HTTP请求拉取对应资源,再将读取到的二进制内容封装为你需要的字典结构,以下是两种常用的实现方式:

方式1:使用Python标准库(无需额外安装依赖)

借助标准库urllib发起请求,不需要安装第三方包就能直接运行:

import urllib.request

def get_pic(data):
    img_url = 'http://192.168.1.100:8123/pic/2021-03-31/snap/238371315.jpg'
    # 发起请求拉取网络图片,自动管理请求连接的关闭
    with urllib.request.urlopen(img_url) as response:
        img_binary = response.read()
    pic = {'image': img_binary}
    return pic

方式2:使用requests库(项目已有依赖时推荐)

如果你的项目已经引入了常用的HTTP请求库requests,写法更简洁,错误处理更完善:

import requests

def get_pic(data):
    img_url = 'http://192.168.1.100:8123/pic/2021-03-31/snap/238371315.jpg'
    resp = requests.get(img_url)
    # 主动校验请求状态,遇到404、500等错误时直接抛出异常,避免拿到无效内容
    resp.raise_for_status()
    pic = {'image': resp.content}
    return pic
注意事项
  • 运行代码的设备需要和部署图片资源的192.168.1.100:8123服务网络连通,无防火墙拦截,确保对应URL可以直接通过浏览器正常打开访问。
  • 从你给出的报错日志看,实际运行时加载的图片URL是http://192.168.1.100:8123/pic/2021-04-01/snap/939450165.jpg,和代码里写死的2021-03-31路径不一致,需要确认动态拼接图片URL的逻辑是否正确,避免路径拼错导致404。
  • 以上方式拿到的图片二进制内容,和原来用open(本地路径, 'rb')获取的内容格式完全一致,可以直接适配你下游的接口调用逻辑,不需要额外做格式转换。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 15:15:04