Data must not be a string. File "C:\kywpy\img-nano.py", line 70, in <module> res...

2025年09月08日 10:31 响应: 2.44秒 状态: success

🚨 错误信息

发生异常: ValueError Data must not be a string. File "C:\kywpy\img-nano.py", line 70, in <module> response = requests.post(url, headers=headers, data=payload, files=files) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ValueError: Data must not be a string.

🤖 AI解决方案

ValueError: Data must not be a string.
ValueError: 数据不能是字符串。

原因分析

requests.post 方法中的 data 参数不应该直接传入一个字符串,当使用 files 参数时,data 参数应该是一个字典,用于包含非文件类型的表单字段。

解决方案

payload 从字符串修改为一个字典。

# 假设 payload 原本是字符串形式的 JSON,例如:
# payload = '{"key": "value"}'

# 修改为字典形式:
payload = {"key": "value"}

# 假设你的 payload 是 JSON 格式的字符串,并且服务器期望接收 JSON
# 那么应该使用 `json` 参数而不是 `data` 参数,或者将 `data` 转换为字典:
# 选项 1: 使用 json 参数
# response = requests.post(url, headers=headers, json=payload_dict, files=files)

# 选项 2: 将 payload 转换为字典(如果服务器支持表单数据)
# payload_dict = json.loads(payload) # 如果 payload 是 JSON 字符串
# response = requests.post(url, headers=headers, data=payload_dict, files=files)

# 根据你的代码和服务器要求,选择最合适的 `payload` 格式。
# 如果 payload 是一个简单的键值对,直接定义为字典即可:
# payload = {'key1': 'value1', 'key2': 'value2'}

预防措施

  • 在发送 POST 请求时,仔细检查 data 参数的类型,确保其为字典(或其他 requests 库支持的类型,如 bytes),避免直接传入字符串。
  • 当需要发送 JSON 数据时,优先使用 json 参数,它会自动处理 JSON 编码和 Content-Type 头。