ruamel.yaml 0.17.16 UnicodeEncodeError报错及Python版本适配问题
问题解答
1. ruamel.yaml与Python版本匹配规则
ruamel.yaml每个大版本都有明确的Python兼容范围,0.17.16版本最低要求Python 3.6及以上,你使用Python 3.5.2搭配该版本属于不兼容的组合,是触发首次UnicodeEncodeError的核心原因之一。
2. 具体解决步骤
- 第一步:先完成版本适配
- 若必须保留Python 3.5.2版本,请将ruamel.yaml降级到0.16.x系列,该版本分支仍支持Python 3.5
- 若可升级Python版本,推荐使用Python 3.7+匹配ruamel.yaml 0.17.x及以上稳定版本,消除基础兼容问题
- 第二步:修正编码相关的错误配置
你之前设置ruamel_yaml.encoding = True是无效配置,该参数需要指定具体编码值,无需全局设置,推荐在写入文件时直接按以下两种正确方式配置即可:
方式一:二进制模式打开文件,dump时指定编码
方式二:文本模式打开文件时直接指定编码with open('output.yaml', 'wb') as fp: ruamel_yaml.dump(content, fp, encoding='utf-8')with open('output.yaml', 'w', encoding='utf-8') as fp: ruamel_yaml.dump(content, fp) - 第三步:修复Python 3.7下的UTF-8文件错误
该问题基本都是写入时未显式指定UTF-8编码,调用系统默认编码导致的,按上述两种写入方式调整即可解决。如果生成的文件存在乱码,可额外添加参数allow_unicode=True到dump方法中,强制不对Unicode字符做转义处理:ruamel_yaml.dump(content, fp, allow_unicode=True)
内容的提问来源于stack exchange,提问作者Claire
相关产品推荐
相关产品推荐

