2012-03-14 2 views
6

Я пытаюсь запустить doctest для функции, которая работает с нулями. Но doctest, кажется, не нравится аннулирует ...Как работать с нулями в docutils

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 
********************************************************************** 

Что я могу сделать, чтобы аннулирует в тестовых случаях, как это?

ответ

7

Вы могли бы избежать всех обратной косой черты, или же изменить строку документации к raw string literal:

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

С r префикса строки символ, после обратной косой черты входит в строка без изменений и все обратные косые черты оставлены в строке.

+0

спасибо. работает угощение! –

3

Использовать \\x вместо \x. Когда вы пишете \x, интерпретатор Python интерпретирует его как нулевой байт, а сам нулевой байт вставляется в docstring. Например ,:

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

>>> def func(x): 
...  """\\x00""" 
... 
>>> print func.__doc__ 
\x00 
Смежные вопросы