Pregunta

Estoy ejecutando Python 2.6 en Ubuntu Lucent y tengo problemas para obtener el signo menos en argumentos de línea de comandos negativos para interpretar correctamente, especialmente cuando la llamada al script se inicia a través del sistema operativo a través de Rails (usando retroceso). En particular, el signo menos parece estar llegando como UTF-8.

Cuando los argumentos de la línea de comandos se interpretan manualmente, como en:

lng = float(sys.argv[4])

desencadena el error:

ValueError: invalid literal for float(): ‐122.768

Como truco, puedo evitar esto coincidiendo con los primeros tres bytes como ' xe2', ' x80' y ' x90', y reemplazándolos con mi propio signo negativo.

Cuando los argumentos de línea de comandos se interpretan a través de Argparse (ver. 1.2.1), como en:

parser.add_argument('--coords', metavar='Coord', dest='coordinates', type=float, nargs=3, help='Latitude, Longitude, and Altitude')

desencadena el error:

sC.py: error: argument --coords: invalid float value: '\xe2\x80\x90122.76838'

¡Cualquier ayuda sería apreciada!

¿Fue útil?

Solución

Es posible que tenga que usar su hack y decirle a Argparse que espere una cadena.

En cuanto a Python, su sistema y ROR están preocupados - y no están relacionados de ninguna manera. Si desea resolver este problema (en lugar de hackearlo), ha subido al código Rails y vea de dónde obtiene sus datos. En algún lugar a lo largo de la línea salida elegante fue importante.

Otros consejos

Sus datos de entrada contienen un carácter Unicode que no es el guión ASCII estándar.

import unicodedata as ud
data = '\xe2\x80\x90122.76838'
unicode_data = data.decode('utf8')
print repr(ud.name(unicode_data[0]))
print repr(ud.name(u'-')) # An ascii hyphen

Producción:

'HYPHEN'
'HYPHEN-MINUS'

Si bien pueden verse igual cuando se imprimen, no lo son. Restringir o desinfectar la entrada.

print float(unicode_data.replace(u'\N{HYPHEN}',u'-'))

Producción:

-122.76838
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top