doctest and '\0'

Tim Peters tim.one at home.com
Fri Aug 31 14:08:22 EDT 2001


[jim.vickroy]
> I have installed Python 2.1 on a MS Windows computer.
>
> It appears that doctest does not work with '\0'.
>
> Below is a sample module that illustrates the:
>
>     "TypeError: compile() argument 1 must be string without null bytes,
> not string"
>
> exception being raised.

Consider this isolated snippet:

>>> eval("'\0' *  5")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: expected string without null bytes
>>>

Same thing.  A doctest is a *string*, and sticking \0 in a string creates a
null byte, and a null byte is never legitimate in program source code.

These alternatives work fine:

>>> eval("'\\0' * 5")  # double the backslash
'\x00\x00\x00\x00\x00'
>>> eval(r"'\0' * 5")  # or use a raw string
'\x00\x00\x00\x00\x00'
>>>

> Am I doing something wrong?

Yes, as above.  If you want the code to contain the 2-character sequence

    \0

then you have to either escape the backslash, or use a raw string to prevent
translation of \0 to chr(0) at the time the string is created (which happens
long before doctest ever sees it).

I haven't tried it, but changing the opening of your docstring from

    """

to

    r"""

will probably make the problem go away.





More information about the Python-list mailing list