2012-03-14 18 views
6

मैं नल के साथ काम करने वाले फ़ंक्शन पर सबसे अच्छा चलाने की कोशिश कर रहा हूं। लेकिन doctest nulls की तरह प्रतीत नहीं होता है ...डॉकुटल्स में नल के साथ कैसे काम करें

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

क्या मैं इस तरह परीक्षण मामलों में nulls अनुमति देने के लिए क्या कर सकते हैं दिखाई दे रही है?

उत्तर

7

आप बैकस्लैश के सभी बच सकता है, या वैकल्पिक रूप से एक raw string literal करने के लिए अपने docstring बदलने के लिए: स्ट्रिंग एक बैकस्लैश के बाद एक चरित्र पर r उपसर्ग के साथ

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

में शामिल है परिवर्तन के बिना स्ट्रिंग, और स्ट्रिंग स्ट्रिंग में सभी बैकस्लैश शेष हैं।

+0

धन्यवाद। एक इलाज करता है! –

3

के बजाय \\x का उपयोग करें। जब आप \x लिखते हैं, तो पाइथन दुभाषिया इसे एक शून्य बाइट के रूप में व्याख्या करता है, और शून्य बाइट स्वयं डॉकस्ट्रिंग में डाला जाता है। उदाहरण के लिए ,:

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

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