1

我在 Ubuntu Lucent 上运行 python 2.6 并且无法正确解释负命令行参数中的减号,特别是当通过 Rails 通过操作系统启动对脚本的调用时(使用反引号)。特别是,减号似乎以 UTF-8 的形式出现。

当手动解释命令行参数时,如下所示:

lng = float(sys.argv[4])

它触发错误:

ValueError: invalid literal for float(): ‐122.768

作为 hack,我可以通过将前三个字节匹配为 '\xe2'、'\x80' 和 '\x90' 并用我自己的负号替换它们来解决这个问题。

当通过 argparse(1.2.1 版)解释命令行参数时,如下所示:

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

它触发错误:

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

任何帮助,将不胜感激!

4

2 回答 2

3

Your input data contains a Unicode character that isn't the standard ascii hyphen.

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

Output:

'HYPHEN'
'HYPHEN-MINUS'

While they may look the same when printed, they are not. Restrict or sanitize the input.

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

Output:

-122.76838
于 2011-12-04T21:38:36.990 回答
1
于 2011-12-04T20:44:11.023 回答