Странное поведение Python с использованием float, int и sqlite - PullRequest
1 голос
/ 09 ноября 2011

У меня очень странная ошибка, которую я не могу объяснить. Это происходит, когда я объединяю python и sqlite. У меня есть таблица, которая содержит поле REAL с именем stop_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)

Я получаю следующий вывод

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)

выходы * * 1016

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 Ответ

2 голосов
/ 09 ноября 2011

Мне кажется, что больше меняется, чем закомментированная строка.

Первый оператор SQL, похоже, выполняется, select "stop_lat" from stops, а другой выполняется без кавычек: select stop_lat from stops.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...