Domanda

Sto eseguendo Python 2.6 su Ubuntu Lucent e ho difficoltà a ottenere il segno negativo in argomenti di linea di comando negativi da interpretare correttamente, specialmente quando la chiamata allo script viene avviata tramite il sistema operativo tramite rotaie (usando backquote). In particolare, il segno meno sembra arrivare come UTF-8.

Quando gli argomenti della linea di comando vengono interpretati manualmente, come in:

lng = float(sys.argv[4])

innesca l'errore:

ValueError: invalid literal for float(): ‐122.768

Come hack, posso aggirarlo abbinando ai primi tre byte come " xe2", " x80" e " x90", e sostituendoli con il mio segno negativo.

Quando gli argomenti della riga di comando vengono interpretati tramite Argparse (Ver. 1.2.1), come in:

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

innesca l'errore:

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

Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione

Potresti dover usare il tuo hack e dire ad ArgParse di aspettarti una stringa.

Per quanto riguarda Python, il tuo sistema e Ror si preoccupano - e non sono collegati in alcun modo. Se vuoi risolvere questo problema (invece di hackerarlo), sei salito al codice Rails e vedi da dove ottengono i suoi dati. Da qualche parte lungo la linea Output di fantasia era importante.

Altri suggerimenti

I tuoi dati di input contiene un carattere Unicode che non è il trattino ASCII standard.

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

Produzione:

'HYPHEN'
'HYPHEN-MINUS'

Sebbene possano apparire uguali quando stampati, non lo sono. Limitare o disinfettare l'input.

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

Produzione:

-122.76838
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top