sintaxis - Prueba de Python con caracteres de nueva línea: error de espacio en blanco inicial incoherente
invalid sintaxis python (3)
Al escribir pruebas de Python, ¿cómo se introducen correctamente los caracteres de nueva línea dentro de una cadena en la prueba? Aquí hay un ejemplo simple:
def remove_newlines(text):
"""
>>> remove_newlines("line1 /n"
... "still line 1/r"
... "now line2 /n"
... "more line2/n")
line1 still line1
now line2 more line2
"""
return text.replace(''/n'', '''')
import doctest
doctest.run_docstring_examples(remove_newlines, globals())
La salida de la cual es:
Traceback (most recent call last):
...
ValueError: line 3 of the docstring for NoName has inconsistent leading whitespace: ''"''
Los documentos docstring realmente aluden al problema, pero no del todo claro.
Un par de otros subprocesos de here y here fueron útiles, pero no fáciles de encontrar dados mis propios criterios de búsqueda.
Aquí está mi solución real:
def remove_CRs(text):
r"""
>>> output = remove_CRs("line1 /r"
... "still line1/n"
... "now line2 /r"
... "more line2/r")
>>> print(output)
line1 still line1
now line2 more line2
"""
return text.replace(''/r'', '''')
import doctest
doctest.run_docstring_examples(remove_CRs, globals())
Tres cosas han cambiado desde el fragmento de código original:
- La cadena de documentación tenía que ser una cadena de python en bruto.
- Tuve que usar
print()
en la salida de la función. - Tuve que superar mi propia confusión con la diferencia entre
/n
/r
. (Eso es de mí.)
Espero que esto salve a alguien más el par de horas que pasé en esto.
Necesitas escapar de la barra invertida.
La cadena de documentación es en sí misma una cadena en la que /n
significa nueva línea. En
def foo():
"""
print "Hello world/n";
"""
pass
la cadena de documentos no contiene una declaración de Python válida, sino que contiene una nueva línea dentro de la cadena citada
Simplemente prefijo mi cadena de documentos con ''r'' funcionó en mi caso. Python 3.5.1.