使用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参数。
- 想用简单的Basic Auth(适合测试):直接删掉
域名与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
相关产品推荐
相关产品推荐

