2012-03-14 24 views
6

Tôi đang cố chạy doctest trên một hàm hoạt động với các giá trị rỗng. Nhưng doctest dường như không thích null ...Cách làm việc với null trong docutils

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

import doctest 
doctest.testmod() 

tôi nhìn thấy các lỗi

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

Tôi có thể làm gì để cho phép null trong trường hợp thử nghiệm như thế này?

Trả lời

7

Bạn có thể thoát khỏi tất cả các gạch chéo ngược, hoặc cách khác thay đổi docstring của bạn đến một raw string literal:

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

Với r tiền tố trên chuỗi một nhân vật sau một dấu chéo ngược được bao gồm trong chuỗi không thay đổi và tất cả các dấu gạch chéo ngược được để lại trong chuỗi.

+0

cảm ơn. làm việc một điều trị! –

3

Sử dụng \\x thay vì \x. Khi bạn viết \x, trình thông dịch Python diễn dịch nó dưới dạng một byte rỗng và bản thân byte rỗng được chèn vào trong chuỗi tài liệu. Ví dụ ,:

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

>>> def func(x): 
...  """\\x00""" 
... 
>>> print func.__doc__ 
\x00 
Các vấn đề liên quan