Возникновение ошибки: "NoneType" object is not iterable
Мне нужно добавить мультиязыность в своего бота. При запросе значения из базы данных возникает ошибка: "NoneType" object is not iterable. Сколько бы я не пытался, решить ее не могу.
def start(message):
get_language = get_user_language(user_id = message.from_user.id)
if get_language == "RU":
bot.send_message(message.from_user.id, "Привет!")
@ensure_connection
def get_user_language(conn, user_id: int):
c = conn.cursor()
c.execute("SELECT language FROM user_language WHERE user_id = ?", (user_id, ))
(res, ) = c.fetchone()
return res
Ошибка, которая возникает:
user@user-pc:~/telegramBOT$ python3 code.py
2020-08-19 16:31:58,439 (util.py:68 WorkerThread1) ERROR - TeleBot: "TypeError occurred, args=("'NoneType' object is not iterable",)
Traceback (most recent call last):
File "/home/user/.local/lib/python3.6/site-packages/telebot/util.py", line 62, in run
task(*args, **kwargs)
File "code.py", line 14, in start
get_language = get_user_language(user_id = message.from_user.id)
File "/home/user/telegramBOT/database.py", line 7, in inner
res = func(*args, **kwargs)
File "/home/user/telegramBOT/database.py", line 48, in get_user_language
(res, ) = c.fetchone()
TypeError: 'NoneType' object is not iterable
"
Traceback (most recent call last):
File "code.py", line 49, in <module>
bot.polling(none_stop = True)
File "/home/user/.local/lib/python3.6/site-packages/telebot/__init__.py", line 427, in polling
self.__threaded_polling(none_stop, interval, timeout)
File "/home/user/.local/lib/python3.6/site-packages/telebot/__init__.py", line 451, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/home/user/.local/lib/python3.6/site-packages/telebot/util.py", line 111, in raise_exceptions
six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
File "/home/user/.local/lib/python3.6/site-packages/six.py", line 703, in reraise
raise value
File "/home/user/.local/lib/python3.6/site-packages/telebot/util.py", line 62, in run
task(*args, **kwargs)
File "code.py", line 14, in start
get_language = get_user_language(user_id = message.from_user.id)
File "/home/user/telegramBOT/database.py", line 7, in inner
res = func(*args, **kwargs)
File "/home/user/telegramBOT/database.py", line 48, in get_user_language
(res, ) = c.fetchone()
TypeError: 'NoneType' object is not iterable
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Думаю, в таблице user_language не нашлось записи с user_id, поэтому c.fetchone() вернул None
Попробуйте так:
@ensure_connection
def get_user_language(conn, user_id: int):
c = conn.cursor()
c.execute("SELECT language FROM user_language WHERE user_id = ?", [user_id])
result = c.fetchone()
if result:
return result[0]
return "RU" # Возвращаем язык бота по умолчанию