如何在docutils中使用null

时间:2012-03-14 22:03:11

标签: python doctest

我正在尝试对一个使用null的函数运行doctest。但doctest似乎并不喜欢空值......

def do_something_with_hex(c):
    """
    >>> do_something_with_hex('\x00')
    '\x00'
    """
return repr(c)

import doctest
doctest.testmod()

我看到了这些错误

Failed example:
    do_something_with_hex(' ')
Exception raised:
    Traceback (most recent call last):
      File "C:\Python27\lib\doctest.py", line 1254, in __run
        compileflags, 1) in test.globs
    TypeError: compile() expected string without null bytes
**********************************************************************

在这样的测试用例中,我该怎么做才能允许空值?

2 个答案:

答案 0 :(得分:7)

您可以转义所有反斜杠,或者将文档字符串更改为raw string literal

def do_something_with_hex(c):
    r"""
    >>> do_something_with_hex('\x00')
    '\x00'
    """
    return repr(c)

如果字符串上带有r前缀,则字符串中包含反斜杠后面的字符不会发生更改,所有反斜杠都会保留在字符串中

答案 1 :(得分:3)

使用\\x代替\x。当您编写\x时,Python解释器将其解释为空字节,并将空字节本身插入到docstring中。 。E.g,:

>>> def func(x):
...     """\x00"""
...
>>> print func.__doc__     # this will print a null byte

>>> def func(x):
...     """\\x00"""
...
>>> print func.__doc__
\x00