Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: lucas25cba en 28 Octubre 2015, 14:02 pm



Título: Problema con comentar bloques en Python 3 (Resuelto)
Publicado por: lucas25cba en 28 Octubre 2015, 14:02 pm
Buenas!
Recién empiezo y ya estoy mareado...  :P
Una duda:
Tengo el siguiente programa sacado de un tutorial:

Citar
#parahumanos.py

SUFIJOS = {1000: [ 'KB' , 'MB' , 'GB' , 'TB' , 'PB' , 'EB' , 'ZB' , 'YB' ] ,
           1024: [ 'KiB ' , 'MiB ' , 'GiB ' , 'TiB ' , 'PiB ' , 'EiB ' , ' ZiB ' ,
                   'YiB ' ]}

def tamanyo_aproximado(tamanyo , un_kilobyte_es_1024_bytes=True ):
    ''' Convierte un tamaño de fichero en formato legible por personas

     Argumentos/parámetros:
     tamanyo __ tamaño de fichero en bytes
     un_kilobyte_es_1024_bytes __ si True (por defecto),
                                  usa múltiplos de 1024
                                  si False, usa múltiplos de 1000

     retorna : string

     '''    
    
    if tamanyo < 0 :
        raise ValueError ("el número debe ser no negativo")

    multiplo = 1024 if un_kilobyte_es_1024_bytes else 1000
    for sufijo in SUFIJOS [multiplo]:
        tamanyo /= multiplo
        if tamanyo < multiplo:
            return ' {0:.1f} {1} ' . format ( tamanyo , sufijo)

    raise ValueError ( 'número demasiado grande ' )

if __name__ == '__ main__':
    print (tamanyo_aproximado (1000000000000 , False))
    print (tamanyo_aproximado (1000000000000) )

Estoy usando Eclipse con PyDev
Al intentar interpretar dicho programa, me larga:
Citar
File "C:\Users\Usuario\Downloads\LABORATORIO\PYTHON\paraHumanos\src\paraHumanos.py", line 8
SyntaxError: Non-UTF-8 code starting with '\xf1' in file C:\Users\Usuario\Downloads\LABORATORIO\PYTHON\paraHumanos\src\paraHumanos.py on line 8, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details


(La linea 8 es
Citar
''' Convierte un tamaño de fichero en formato legible por personas

Si quito las triples comillas simples y pongo al comienzo de cada linea del bloque de comentarios el simbolo "#", sale el mismo error...



Título: Re: Problema con comentar bloques en Python 3
Publicado por: lucas25cba en 28 Octubre 2015, 14:09 pm
Perdon! Paso el codigo como corresponde, no como una cita! Si que estoy mareado  :P

Código
  1. #parahumanos.py
  2.  
  3. SUFIJOS = {1000: [ 'KB' , 'MB' , 'GB' , 'TB' , 'PB' , 'EB' , 'ZB' , 'YB' ] ,
  4.           1024: [ 'KiB ' , 'MiB ' , 'GiB ' , 'TiB ' , 'PiB ' , 'EiB ' , ' ZiB ' ,
  5.                   'YiB ' ]}
  6.  
  7. def tamanyo_aproximado(tamanyo , un_kilobyte_es_1024_bytes=True ):
  8.    ''' Convierte un tamaño de fichero en formato legible por personas
  9.  
  10.     Argumentos/parámetros:
  11.     tamanyo __ tamaño de fichero en bytes
  12.     un_kilobyte_es_1024_bytes __ si True (por defecto),
  13.                                  usa múltiplos de 1024
  14.                                  si False, usa múltiplos de 1000
  15.  
  16.     retorna : string
  17.  
  18.     '''    
  19.  
  20.    if tamanyo < 0 :
  21.        raise ValueError ("el número debe ser no negativo")
  22.  
  23.    multiplo = 1024 if un_kilobyte_es_1024_bytes else 1000
  24.    for sufijo in SUFIJOS [multiplo]:
  25.        tamanyo /= multiplo
  26.        if tamanyo < multiplo:
  27.            return ' {0:.1f} {1} ' . format ( tamanyo , sufijo)
  28.  
  29.    raise ValueError ( 'número demasiado grande ' )
  30.  
  31. if __name__ == '__ main__':
  32.    print (tamanyo_aproximado (1000000000000 , False))
  33.    print (tamanyo_aproximado (1000000000000) )
  34.  




Título: Re: Problema con comentar bloques en Python 3
Publicado por: Pablo Videla en 28 Octubre 2015, 14:48 pm
Coloca esto en la cabecera de tu archivo
Código
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-

El problema es que estas usando tildes en los comentarios, y necesitas decirle explictamente que use el encoding utf8 para que entienda esos tildes.

De hecho si ingresas a la pagina que te sale en el error te explica ahí detalladamente.
https://www.python.org/dev/peps/pep-0263/
Citar
Defining the Encoding
    Python will default to ASCII as standard encoding if no other
    encoding hints are given.

    To define a source code encoding, a magic comment must
    be placed into the source files either as first or second
    line in the file, such as:

          # coding=<encoding name>

    or (using formats recognized by popular editors)

          #!/usr/bin/python
          # -*- coding: <encoding name> -*-

    or

          #!/usr/bin/python
          # vim: set fileencoding=<encoding name> :


Título: Re: Problema con comentar bloques en Python 3
Publicado por: lucas25cba en 28 Octubre 2015, 14:56 pm
Joya! Gracias!!!!!


Título: Re: Problema con comentar bloques en Python 3
Publicado por: Pablo Videla en 28 Octubre 2015, 14:59 pm
Joya! Gracias!!!!!

De nada, saludos!