Найти - Пользователи
Полная версия: TypeError: ‘tuple’ object is not callable
Начало » Python для новичков » TypeError: ‘tuple’ object is not callable
1
Yonga
Только начал изучать 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
rami
Yonga
if (x,)== row(2):
Судя по всему скобки должны быть квадратные:
 if (x,)== row[2]:
Yonga
вы правы - должны быть квадратные скобки.Ошибка исчезла, но в результате все наоборот. Когда ввожу номер существующий в базе - ответ - “This number don't exist”. Когда ввожу несуществующий номер - ничего.
rami
Пробуйте:
 if x == row[2]:
Yonga
rami
Пробуйте:

if x == row:

То же самое. Такое ощущение что не совпадают типы данных.
rami
Запакуйте базу и файл с кодом в архив и выложите здесь.
Yonga
Добавил преобразование в int():
 for row in cursor:
    if int(x) == int(row[2]):
Когда ввожу существующий номер уже выдает результат, а вот при вводе несуществующего/неправильного - ничего.
rami
Нужно сначала получить список результатов запроса, а затем, если список не пустой пройти циклом, если пустой, то сообщить, что пусто.
Пробуйте так:
 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
Yonga
Спасибо, Rami. Все работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB