Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2018 12:17:42

Yonga
Зарегистрирован: 2018-11-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Только начал изучать Python (да и вообще программирование). Нужна программа для вывода данных из базы по номеру телефона.Без проверки наличия номера работает. Но хочу с начала проверить на наличии такой записи в базе и только потом выполнить вывод.

 print("Input number in format 0YYYxxxx:")
x = input()
import sqlite3
conn = sqlite3.connect ("D:\DB_SQLITE\elta_db.db")
cursor = conn.cursor()
cursor.execute ("""select Raion, bloc, realphone, phone, elta_number.coord, elta_coord.coord, elta_coord.board,
                    elta_coord.port_on_board
              from elta_number INNER JOIN elta_coord ON elta_number.coord = elta_coord.coord where realphone=?""", (x,))
for row in cursor:
    if (x,)== row(2):
        print ("Number= ", row[3])
        print ("District= ", row[0])
        print ("Bloc=  ", row[1])
        print ("Coord= " , row[4])
        print ("Board= ",row[6])
        print ("Port=  ",row[7])
    else:
        print ("This number don't exist")
conn.close

Ошибка:
Traceback (most recent call last):
File “Dprograming/Elta_numar__for_forum.py”, line 10, in <module>
if (x,)== row(2):
TypeError: ‘tuple’ object is not callable

Офлайн

#2 Ноя. 15, 2018 12:29:22

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Yonga
if (x,)== row(2):
Судя по всему скобки должны быть квадратные:
 if (x,)== row[2]:

Офлайн

#3 Ноя. 15, 2018 12:46:54

Yonga
Зарегистрирован: 2018-11-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

вы правы - должны быть квадратные скобки.Ошибка исчезла, но в результате все наоборот. Когда ввожу номер существующий в базе - ответ - “This number don't exist”. Когда ввожу несуществующий номер - ничего.

Офлайн

#4 Ноя. 15, 2018 13:07:11

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Пробуйте:

 if x == row[2]:

Офлайн

#5 Ноя. 15, 2018 13:25:21

Yonga
Зарегистрирован: 2018-11-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

rami
Пробуйте:

if x == row:

То же самое. Такое ощущение что не совпадают типы данных.

Отредактировано Yonga (Ноя. 15, 2018 13:30:15)

Офлайн

#6 Ноя. 15, 2018 13:42:47

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Запакуйте базу и файл с кодом в архив и выложите здесь.

Офлайн

#7 Ноя. 15, 2018 13:55:47

Yonga
Зарегистрирован: 2018-11-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Добавил преобразование в int():

 for row in cursor:
    if int(x) == int(row[2]):
Когда ввожу существующий номер уже выдает результат, а вот при вводе несуществующего/неправильного - ничего.

Прикреплённый файлы:
attachment select.rar (14,2 KБ)

Офлайн

#8 Ноя. 15, 2018 15:13:57

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Нужно сначала получить список результатов запроса, а затем, если список не пустой пройти циклом, если пустой, то сообщить, что пусто.
Пробуйте так:

 print("Input number in format YYYxxxx:")
x = input()
import sqlite3
#conn = sqlite3.connect ("D:\DB_SQLITE\elta_db.db")
conn = sqlite3.connect ("Elta_DB.db")
cursor = conn.cursor()
cursor.execute ("""select Raion, bloc, realphone, phone, elta_number.coord, elta_coord.coord, elta_coord.board,
                    elta_coord.port_on_board
              from elta_number INNER JOIN elta_coord ON elta_number.coord = elta_coord.coord where realphone=?""",(x,))
data=cursor.fetchall()    #если номер существует, то что-то получим, если нет, то пустой список
if len(data):
    for row in data:
#        if int(x) == int(row[2]):   #это не нужно, если мы здесь, то есть нужные данные
        print ("Number= ", row[2])
        print ("District= ", row[0])
        print ("Bloc=  ", row[1])
        print ("Coord= " , row[4])
        print ("Board= ",row[6])
        print ("Port=  ",row[7])
else:
    print ("This number don't exist")
conn.close

Офлайн

#9 Ноя. 15, 2018 15:19:08

Yonga
Зарегистрирован: 2018-11-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: ‘tuple’ object is not callable

Спасибо, Rami. Все работает.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version