В общем, проблему описал в комментариях. Я хочу переписать данный код таким образом, чтобы у меня была функция чистки пользователей, которая через эту ошибку добавляет пользователей в массив, затем через цикл удаляет их из базы данных, и тем самым функция рассылки работает без багов.
Как обратиться к данной ошибке напрямую, чтобы цикл перебирал битые айди?
@bot.message_handler(commands=['secretwords'])
def mess(message):
# при вызове в боте команды /secretwords "какой-то текст"
# происходит рассылка по всем пользователям
try:
# айди пользователей содержатся в базе данных
# которая проходит через цикл
# но при например 3-ем пользователе который заблокировал бота
# цикл завершается и 4-ый пользователь не получается рассылку
# получают только 1-ый и 2-ой
sqlite_connection = sqlite3.connect('users.db')
cursor = sqlite_connection.cursor()
sqlite_select_query = """SELECT * from login_id"""
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
records = [i[0] for i in records]
for user in records:
a =[]
#user = int(user)
bot.send_message(user, message.text[message.text.find(' '):])
a.append(user)
print('norm',a)
except telebot.apihelper.ApiException as e:
if e.result.status_code == 403 or e.result.status_code == 400:
b =[]
b.append(user)
print(b)
n = 0
connect = sqlite3.connect('users.db')
cursor = connect.cursor()
del_id = b[0]
n+=1
cursor.execute(f"DELETE FROM login_id WHERE id={del_id}")
connect.commit()
bot.send_message(message.from_user.id,f'пользователей удалено {n}')
cursor.close()
bot.send_message(message.from_user.id,f'пользователей всего {len(records)}')