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

使用Python发布WordPress文章报错<UserWarning: <exception str() failed>>如何解决?

解决Python调用WordPress API发布文章时的<UserWarning: <exception str() failed>>错误

这个模糊的警告一般是因为底层HTTP请求出了问题,但异常信息没被正确解析出来。别着急,咱们一步步排查解决:

第一步:开启调试模式,抓出真实错误

先修改代码开启调试日志,同时捕获异常打印详细信息,这样能看到到底是哪里出问题了:

from wordpress import API
import traceback

# 初始化API客户端,开启调试模式
wpapi = API(
    url="http://my_domain",
    # 先注释掉OAuth相关参数,先用Basic Auth测试
    # consumer_key="xxx",
    # consumer_secret="xxx",
    api="wp-json",
    version="wp/v2",
    wp_user="admin",
    wp_pass="adminpass",
    debug=True  # 开启调试,会打印请求头、响应等详细信息
)

data = {
    "content": "This is the big mess I've made in python",
    "status": "publish",
    "title": "Stuff from python",
    "slug": "here-is-another-api-post",
    "author": "1"
}

try:
    response = wpapi.post('posts', data)
    print("文章发布成功!响应内容:", response)
except Exception as e:
    print("错误详情:", str(e))
    traceback.print_exc()

第二步:排查常见问题

根据调试日志,你可以重点检查这几个点:

  • 认证方式冲突:你的代码同时传入了OAuth的consumer_key/consumer_secret和Basic Auth的wp_user/wp_pass,这会导致认证逻辑混乱。只保留一种认证方式:

    • 想用简单的Basic Auth(适合测试):直接删掉consumer_key和consumer_secret参数,确保wp_user和wp_pass是WordPress后台的有效账号密码,且该账号有发布文章的权限。
    • 想用OAuth1认证:需要先在WordPress后台安装OAuth插件(比如WP REST API OAuth 1.0a Server),生成有效的密钥对,然后删掉wp_user和wp_pass参数。
  • 域名与REST API可用性:验证你的WordPress REST API是否正常工作:在浏览器访问http://my_domain/wp-json/wp/v2/posts,如果返回JSON格式的文章列表,说明API正常;如果返回404或错误,可能是域名写错了(比如WordPress安装在子目录,URL需要对应调整),或者主题/插件禁用了REST API。

  • 参数正确性:

    • author字段:确保"1"是对应用户的真实ID(默认admin的ID是1,但如果你的环境里不是,需要去WordPress后台用户列表查看)
    • slug字段:确保这个slug没有被已有的文章占用,否则会返回错误。

第三步:测试简化版代码

如果还是有问题,先跑一个最简化的测试代码,排除参数问题:

from wordpress import API

wpapi = API(
    url="http://your-real-domain.com",
    api="wp-json",
    version="wp/v2",
    wp_user="your-admin-username",
    wp_pass="your-admin-password"
)

# 只传必要参数
simple_data = {
    "title": "测试文章",
    "content": "这是Python发布的测试内容",
    "status": "publish"
}

try:
    res = wpapi.post('posts', simple_data)
    print(f"测试成功!文章ID: {res['id']}")
except Exception as e:
    print(f"测试错误: {str(e)}")

这样一步步排查,应该能找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:55:49