¿Por qué no se escapa automáticamente Python ‘\’ en __doc__?

Parece que algunos caracteres de escape aún son importantes en la cadena de documentación. Por ejemplo, si ejecutamos python foo.py ( Python 2.7.10 ), emitirá un error como ValueError: invalid \x escape .

 def f(): """ do not deal with '\x0' """ pass 

Y en efecto, parece que la documentación correcta debería ser:

  """ do not deal with '\\\\x0' """ 

Además también afecta a la import .

Para Python 3.4.3+ , el mensaje de error es:

  File "foo.py", line 4 """ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated \xXX escape 

Lo siento un poco extraño ya que estaba pensando que solo afectaría a __doc__ y no tendría ningún efecto secundario en el módulo en sí.

¿Por qué está diseñado para ser así? ¿Es un error / error en Python?

NOTA

Sé el significado de """ y los literales en bruto, sin embargo, creo que el intérprete de Python debería poder tratar la cadena de documentos especialmente, al menos en teoría.

De la PEP 257 :

Para mantener la coherencia, siempre use """triple double quotes""" alrededor de las cadenas de documentación. Use r"""raw triple double quotes""" si usa alguna barra invertida en sus cadenas de documentación. Para las cadenas de documentación de Unicode, use u"""Unicode triple-quoted strings""" .

Hay dos formas de cadenas de documentos: cadenas de documentos de una línea y líneas de documentos de varias líneas.


También desde aquí :

No hay un tipo de python como “cadena sin formato”; hay literales de cadena sin formato , que son solo un enfoque de syntax (de muchos) para especificar constantes (es decir, literales) que son de tipos de cadena.

Así que “obtener” algo “como una cadena en bruto” simplemente no tiene sentido. Puede escribir cadenas de documentos como literales de cadena sin formato (es decir, con el prefijo r , que es exactamente lo que denota un literal de cadena sin formato, la syntax específica que identifica dicha constante en el comstackdor de Python), o bien duplicar las barras invertidas en ellas (una Una forma alternativa de especificar cadenas constantes, incluidos los caracteres de barra invertida, pero eso no tiene nada que ver con “obtenerlos” de una forma u otra.