Doctest involucrando personajes de escape

Tiene una función fix (), como una función auxiliar para una función de salida que escribe cadenas en un archivo de texto.

def fix(line): """ returns the corrected line, with all apostrophes prefixed by an escape character >>> fix('DOUG\'S') 'DOUG\\\'S' """ if '\'' in line: return line.replace('\'', '\\\'') return line 

Al activar doctests, aparece el siguiente error:

 Failed example: fix('DOUG'S') Exception raised: Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1254, in __run compileflags, 1) in test.globs File "", line 1 fix('DOUG'S') ^ 

No importa qué combinación de \ y ‘s uso, el doctest no parece querer trabajar, aunque la función en sí funciona perfectamente. Tenga la sospecha de que es un resultado del doctest en un comentario de bloque, pero hay algunos consejos para resolverlo.

¿Es esto lo que quieres?:

 def fix(line): r""" returns the corrected line, with all apostrophes prefixed by an escape character >>> fix("DOUG\'S") "DOUG\\'S" >>> fix("DOUG'S") == r"DOUG\'S" True >>> fix("DOUG'S") "DOUG\\'S" """ return line.replace("'", r"\'") import doctest doctest.testmod() 

cuerdas en bruto son tu amigo …

Primero, esto es lo que sucede si realmente llama a su función en el intérprete interactivo:

 >>> fix("Doug's") "Doug\\'s" 

Tenga en cuenta que no necesita escapar de comillas simples en cadenas entre comillas dobles, y que Python no hace esto en la representación de la cadena resultante, solo se escapa la barra diagonal inversa.

Esto significa que la cadena de documentación correcta debe ser (sin probar)

 """ returns the corrected line, with all apostrophes prefixed by an escape character >>> fix("DOUG'S") "DOUG\\\\'S" """ 

Usaría un literal de cadena sin formato para esta cadena de documentos para hacer esto más legible:

 r""" returns the corrected line, with all apostrophes prefixed by an escape character >>> fix("DOUG'S") "DOUG\\'S" """