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

如何在Python doctest中使用bytearray编写测试用例?

解决doctest中传入含空字节的bytes/bytearray参数报错问题

问题场景

定义了如下函数:

def fun12(bytes_var: bytearray, signed: bool) -> int:
    # 函数实现逻辑

直接执行print(fun12(b'\x00\x10', False))时代码运行正常,但在doctest注释中编写测试用例:

>>> fun12(b'\x00\x10',False)
16

却触发报错,错误信息如下:

Failed example:
fun12(b'\x00\x10',False)
Exception raised:
Traceback (most recent call last):
File "/Users/usr12/.pyenv/versions/3.10.0/lib/python3.10/doctest.py", line 1348, in __run
exec(compile(example.source, filename, "single",
ValueError: source code string cannot contain null bytes


1 items had failures:
1 of 1 in main
Test Failed 1 failures.

问题根源是doctest在编译测试用例源码时,会把字节字面量里的\x00(空字节)视为无效的源码字符,导致编译失败。

可行解决方案

1. 使用十六进制字符串构造参数

通过bytes.fromhex()或bytearray.fromhex()来生成含空字节的对象,避免直接在源码中写\x00:

>>> fun12(bytearray.fromhex('0010'), False)
16

或者:

>>> fun12(bytes.fromhex('0010'), False)
16

2. 拆分拼接构造字节对象

把包含空字节的部分和其他字节分开构造后拼接,绕开直接写\x00的问题:

>>> fun12(b'\x00' + b'\x10', False)
16

不过这种方式在部分Python版本或环境中仍可能触发类似问题,优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:01:07