Ошибка синтаксиса у несуществующего символа
Я пишу телеграм бота с локальной базой данных sqlite3. При попытке извлечь данные из таблицы для проверки регистрации пользователя в боте выдает ошибку.
def bot_start(message):
connection = sqlite3.connect('users.db')
db = connection.cursor()
db.execute("""CREATE TABLE IF NOT EXISTS users (
telegram_user TEXT,
rollgame_account TEXT,
username TEXT,
telegram_id INT
)""")
connection.commit()
if db.execute("SELECT telegram_user FROM users WHERE telegram_id = {}".format(id)).fetchone()[0] == 'yes':
client.register_next_step_handler(msg, bot_menu)
else:
client.register_next_step_handler(msg, bot_user_authorization)
Ошибка:
Traceback (most recent call last):
File "bot.py", line 66, in <module>
client.polling(none_stop = True, interval = 0)
File "C:\Users\sakae\AppData\Local\Programs\Python\Python37-32\lib\site-packages\telebot\__init__.py", line 485, in polling
self.__threaded_polling(none_stop, interval, timeout, long_polling_timeout)
File "C:\Users\sakae\AppData\Local\Programs\Python\Python37-32\lib\site-packages\telebot\__init__.py", line 544, in __threaded_polling
raise e
File "C:\Users\sakae\AppData\Local\Programs\Python\Python37-32\lib\site-packages\telebot\__init__.py", line 507, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\sakae\AppData\Local\Programs\Python\Python37-32\lib\site-packages\telebot\util.py", line 117, in raise_exceptions
raise self.exception_info
File "C:\Users\sakae\AppData\Local\Programs\Python\Python37-32\lib\site-packages\telebot\util.py", line 69, in run
task(*args, **kwargs)
File "bot.py", line 25, in bot_start
if db.execute("SELECT telegram_user FROM users WHERE telegram_id = {}".format(id)).fetchone()[0] == 'yes':
sqlite3.OperationalError: near "<": syntax error
Символа "<" в моем коде нет.
Ответы (1 шт):
Автор решения: Xander
→ Ссылка
Ошибка возникает из-за того, что запрос вы формируете так:
"SELECT telegram_user FROM users WHERE telegram_id = {}".format(id)
У вас в коде нигде не объявлена переменная id.
Но зато в питоне id - это встроенная функция. А если вы любую встроенную функцию попытаетесь привести к строке, то увидите такое:
<built-in function id>
Вот отсюда и берётся <.
Скорее всего у вас вместо id должно быть что-то вроде message.id или подобное (я не разбираюсь в телеграмных ботах, поэтому точнее не подскажу).