如何为doctest表示包含不可见ASCII的字节数组?

时间:2017-08-26 18:44:31

标签: python-3.x doctest

我有以下Python代码:

def example(byte_array):
    """
    Return the byte array.
    >>> example(b'\x01')
    b'\x01'
    """
    return byte_array

当使用python3执行此代码时,doctest失败。以下是输出:

**********************************************************************
File "example.py", line 74, in __main__.example
Failed example:
    example(b'')
Expected:
    b''
Got:
    b'\x01'

预期结果是错误的。我怎么写这个测试通过?我必须做一些令人费解的事情,例如example(b\'x01') is b'\x01'匹配True,还是有更好的解决方案?

请注意,当使用example(b'\0x2d')时,测试会正确传递,大概是因为字符0x2d是短划线(“ - ”),并且可见地打印到终端。

2 个答案:

答案 0 :(得分:0)

转义字符串中的反斜杠。

"""
 ...
b'\\x01'
 ...
"""

答案 1 :(得分:0)

虽然转义反斜杠的 previous answer 有效,但 flake8(版本 3.8.4)会抱怨:

D301 Use r""" if any backslashes in a docstring

更好的方法是使文档字符串成为带有前导 r 的原始字符串文字:

  • 预期输出中不需要转义反斜杠
  • flake8 也不再引发错误
def example(byte_array):
    r"""
    Return the byte array.

    >>> example(b'\x01')
    b'\x01'
    """
    return byte_array