我有(匿名)在Python 2.6.8从值组成的哈希:为什么float('3')显然返回Python 2.6.8中的TypeError?
sys.stderr.write('#' + str(dictionary['Field 4']) + '#\n')
kpis_found.append(float(int(dictionary['Field 1']), 1) *
max(float(dictionary['Field 2']), 1) *
max(float(dictionary['Field 3']), 1) *
max(float(dictionary['Field 4']), 1) *
max(float(dictionary['Field 5']), 1))
我得到的输出是:
[Fri Jul 13 09:04:44 2012] [error] [client ::1] #3#
[Fri Jul 13 09:04:44 2012] [error] [client ::1] Traceback (most recent call last):
[Fri Jul 13 09:04:44 2012] [error] [client ::1] File "/Users/jonathan/mirror/civic/google_maps/index.cgi", line 357, in <module>
[Fri Jul 13 09:04:44 2012] [error] [client ::1] max(float(dictionary['Field 4']), 1) *
[Fri Jul 13 09:04:44 2012] [error] [client ::1] TypeError: float() takes at most 1 argument (2 given)
据我所知,CSV文件生成(通常)可转换为整数的字符串,或(偶尔)可转换为浮动的字符串。如果我遇到NULL,那应该更容易诊断。调试输出似乎确认该字段是'3'。
这是如何得到TypeError?我已经通过括号运行,以确保我没有计算
max(float(foo, bar))
而是计算
max(float(foo), bar)
任何有识之士将受到欢迎。
这里的令人困惑的事情就是,Python定位在多行语句中的最后一行的错误,而它实际上是在第一线。 – 2012-07-13 14:19:55
@SvenMarnach没有意识到这是原因,但很有趣。为什么它不是被标记的多行语句的第一行? – JAB 2012-07-13 14:44:22
@JAB:在CPython中,每个简单的语句只会在代码对象的行号表中产生一行,而选择的行号是多行语句的最后一行。一般来说,这样做会很棘手,所以编译器不会感到困扰。 (另见http://hg.python.org/cpython/file/93df82c18781/Objects/lnotab_notes.txt) – 2012-07-13 15:00:34