2012-08-08 10 views
5

¿Cómo es que python reacciona a indentaciones de un comentario?IndentationError from comment in python

def foo(): 
    """ 
    Random comment 
    """ 
    return True 

funciona, pero:

def foo(): 
""" 
Random comment 
""" 
    return True 

no funciona, lanzando una IndentationError.

Me parece raro ya que los comentarios no deberían ser nada más que comentarios. Y, por cierto, esto funciona:

def foo(): 
# Another random comment 
    return True 
+0

Probablemente quiera decir que el segundo fragmento de código * does * arroja un 'IndentionError'. –

+2

@Tichodroma realmente el OP significa que el segundo fragmento de código no funciona, lanzando un 'IndentationError' – elssar

+1

¡Ah, inglés aquí en Stack Overflow! –

Respuesta

11

La cadena tripple-citada no es un comentario; es el docstring del método. Puede acceder a él con foo.__doc__ más tarde, por ejemplo, o tenerlo formateado para usted con help(foo). Tripple-quoting (""" o ''') es un método específico de python para especificar un string literal donde no es necesario escaparse de las nuevas líneas.

Como tal, es parte del cuerpo de la función y, por lo tanto, debe sangrar para que coincida. De hecho, cualquier cadena que aparezca como first statement of a function se trata como una docstring, las comillas simples también funcionarían. El mismo truco funciona también para clases y módulos.

Muchas herramientas pueden hacer uso de esta cadena de documentación; puede incrustar doctest tests en esta información, por ejemplo. Consulte PEP 257 para conocer las convenciones sobre el formato de esta cadena.

Comentarios sobre la otra parte, son siempre denotado por un # (donde no es parte de una cadena literal) y se ignoran hasta el final de una línea. Si toda la línea contiene un comentario, se ignorará toda la línea, al igual que una línea con espacios en blanco. Vea el documentation on comments.

+1

Debe agregar que los comentarios en Python solo comienzan con '#' y nada más. –

+1

Creo que estás enfatizando demasiado la docstring-ness. El problema de sangría no tiene nada que ver con docstrings per se. Simplemente tiene que ver con cadenas. – BrenBarn

+0

con 'pep 257' tienes que leer la sección de comentarios de' pep8' http://www.python.org/dev/peps/pep-0008/#comments –

1

La cadena de comillas triples no es un comentario, es una cadena literal. No es asignado o usado de ninguna manera por tu código, pero sigue siendo una cadena regular y debe ajustarse a la sintaxis de Python. (En este caso, resulta ser la docstring, pero eso no tiene nada que ver con si la sangría importa o no).

# es la forma de obtener comentarios.

+1

No asignado o usado ?! –

+1

@Martijn Peters: supongo que quieres decir que es el docstring? No se asigna ni se usa en el código. Resulta ser el docstring, pero eso no tiene nada que ver con por qué se requiere o no la sangría. Edité para aclarar que es el docstring, sin embargo. – BrenBarn

+1

No asignado ni usado * en sus ejemplos aquí *, pero * está * asignado. Su declaración es, en el mejor de los casos, confusa. –

Cuestiones relacionadas