2012-03-14 10 views
6

Estoy tratando de ejecutar doctest en una función que funciona con nulos. Pero no parece doctest a como los nulos ...Cómo trabajar con nulos en docutils

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

import doctest 
doctest.testmod() 

que estoy viendo estos errores

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

¿Qué puedo hacer yo para permitir valores nulos en los casos de prueba de este tipo?

Respuesta

7

Se podía escapar de todas las barras invertidas, o bien cambiar su cadena de documentación a un raw string literal:

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

Con el prefijo r en la cadena de un carácter que sigue a una barra invertida está incluido en el cadena sin cambio, y todas las barras invertidas quedan en la cadena.

+0

gracias. funciona un placer! –

3

Use \\x en lugar de \x. Cuando escribe \x, el intérprete de Python lo interpreta como un byte nulo, y el byte nulo se inserta en la docstring. Por ejemplo ,:

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

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