奇怪的python行为涉及浮点数,整数和sqlite

时间:2011-11-09 12:05:02

标签: python sqlite floating-point

我有一个非常奇怪的错误,我无法解释。它发生在我结合python和sqlite时。我有一个表包含一个名为stop_lat的REAL字段。当我运行以下代码时:

c = conn.cursor()
c.execute("select stop_lat from stops;")
for (stop_lat, ) in c:
    print stop_lat
    print type(stop_lat)
    stop_lat = int(stop_lat*1000)

我得到以下输出

stop_lat
<type 'unicode'>
Traceback (most recent call last):
  File "./extract_data_tools/extract_trips.py", line 47, in <module>
    stop_lat = int(stop_lat*1000)
ValueError: invalid literal for int() with base 10: 'stop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_latstop_lat'

现在当我注释掉最后一行时,意味着我执行

c = conn.cursor()
c.execute("select stop_lat from stops;")
for (stop_lat, ) in c:
    print stop_lat
    print type(stop_lat)
    #stop_lat = int(stop_lat*1000)

我得到以下输出:

37.743804
<type 'float'>
37.780889
<type 'float'>
37.772006
<type 'float'>
37.723433
<type 'float'>
37.783026
<type 'float'>
...

意味着stop_lat的类型取决于我是否将它传递给int ...这对我来说没有任何意义。它甚至变得陌生。以下代码

c = conn.cursor()
c.execute("select stop_lat from stops;")
for (stop_lat, ) in c:
    print stop_lat
    print type(stop_lat)
    stop_lat = stop_lat*1000
    print stop_lat
    print type(stop_lat)

输出

37.780889
<type 'float'>
37780.889
<type 'float'>
37.772006
<type 'float'>
37772.006
<type 'float'>
37.723433
<type 'float'>
37723.433
<type 'float'>
37.783026
<type 'float'>
37783.026
<type 'float'>
...

任何人都可以向我解释这里发生了什么吗?如果没有sqlite在游戏中(即代码文字按预期工作),我无法重现问题。

1 个答案:

答案 0 :(得分:2)

在我看来,更多的是改变了注释掉的行。

第一个SQL语句似乎正在运行,select "stop_lat" from stops而另一个SQL语句没有引号:select stop_lat from stops