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

Python单元测试出现UnicodeEncodeError内部错误,求排查方向

问题分析:unittest测试中tearDown阶段的UnicodeEncodeError错误

问题描述

编写了一个包含JSON文件读取逻辑的Python测试用例,单独读取文件无异常,但使用unittest.TestCase执行测试时出现内部错误。错误栈未指向业务代码,已将JSON文件读取编码改为UTF-8仍报错,测试用例本身可正常通过,调试发现错误发生在tearDown()执行期间/之后。

错误日志

INTERNALERROR>     self.message('testStdErr', name=testName, out=out, flowId=flowId)
INTERNALERROR>   File "C:\Program Files\JetBrains\PyCharm Community Edition 2022.3.1\plugins\python-ce\helpers\pycharm\_jb_runner_tools.py", line 117, in message
INTERNALERROR>     _old_service_messages.message(self, messageName, **properties)
INTERNALERROR>   File "C:\Program Files\JetBrains\PyCharm Community Edition 2022.3.1\plugins\python-ce\helpers\pycharm\teamcity\messages.py", line 101, in message
INTERNALERROR>     retry_on_EAGAIN(self.output.write)(self.encode(message))
INTERNALERROR>   File "C:\Program Files\JetBrains\PyCharm Community Edition 2022.3.1\plugins\python-ce\helpers\pycharm\teamcity\messages.py", line 68, in encode
INTERNALERROR>     value = value.encode(self.encoding)
INTERNALERROR>   File "C:\Users\myuser\Anaconda3\envs\myrepo\lib\encodings\cp1252.py", line 12, in encode
INTERNALERROR>     return codecs.charmap_encode(input,errors,encoding_table)
INTERNALERROR> UnicodeEncodeError: 'charmap' codec can't encode characters in position 524-533: character maps to <undefined>

错误原因

本质是编码不匹配:PyCharm的测试 runner 默认使用Windows控制台编码(cp1252)输出测试相关信息,但测试过程中产生了cp1252无法编码的Unicode字符(如中文、特殊符号等),这些字符被测试框架捕获后,在tearDown阶段生成测试报告/输出日志时触发编码失败。

排查与解决方向

  • 检查测试用例中所有输出内容:包括print语句、日志输出、断言的错误信息(即便测试通过,框架可能仍会记录上下文),确认是否包含非cp1252兼容的字符
  • 检查tearDown()方法逻辑:是否存在打印日志、输出测试数据(如读取的JSON中的特殊字符)、或清理操作时的输出内容
  • 修改PyCharm编码设置:进入File > Settings > Build, Execution, Deployment > Console > Python Console,将编码改为UTF-8;同时在测试运行配置中添加环境变量PYTHONIOENCODING=utf-8
  • 强制设置系统输出编码:在测试代码开头添加以下代码,确保输出流使用UTF-8编码
    import sys
    sys.stdout.reconfigure(encoding='utf-8')
    sys.stderr.reconfigure(encoding='utf-8')
    
  • 检查JSON文件内容:确认JSON中的特殊字符是否在测试过程中被输出到控制台,即便读取时用了UTF-8,输出环节仍可能触发编码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:17:37