Не работает проверка наличия отработки в функции

Проблема: Есть функция check_tags, если в ней была выполнена работа, то if check_tags != -1: не должен отрабатывать, в моем случае он работает. Может я сделал неправильную проверку, как можно решить мою проблему?

Код:

            tags_list = ['40ТЕСТ8381', '41ТЕСТ8381', '42ТЕСТ8381', '43ТЕСТ8381', '44ТЕСТ8381', '45ТЕСТ8381',
                         '46ТЕСТ8381', '47ТЕСТ8381']

            if msg.find('ВНИМАНИЕ') != -1:
                def check_tags():
                    for tags in tags_list:
                        if msg.find(tags) != -1:
                            conn = sqlite3.connect('database.db', check_same_thread=False)
                            cur = conn.cursor()
                            cur.execute('SELECT group_id FROM groups WHERE study_group=?', (tags,))
                            group_check = cur.fetchall()
                            if len(group_check) == 0:
                                print('Беседа группы не подключена!')
                            else:
                                for group_advert in group_check:
                                    bot.send_message(group_advert[0], text=msg)
                            cur.close()
                            conn.close()
                check_tags()
                if check_tags != -1:
                    conn = sqlite3.connect('database.db', check_same_thread=False)
                    cur = conn.cursor()
                    cur.execute('SELECT group_id FROM groups')
                    groups_id = cur.fetchall()
                    for group_id in groups_id:
                        print(group_id)
                        bot.send_message(group_id[0], text=msg)
                    cur.close()
                    conn.close()

Ответы (1 шт):

Автор решения: CrazyElf

Архитектура работы с функциями должна быть примерно такой:

def check_tags():
    ...
    if некое_условие:
        result = 1
    else:
        result = -1
    return result

check_result = check_tags()
if check_result != -1:
    ...

То есть вы должны вернуть из функции какое-то значение, присвоить его в переменную и потом проверить.

Ещё более идиоматический вариант может выглядеть так:

def is_check_passed():
    ...
    if некое_условие:
        return True
    else:
        return False

if is_check_passed():
    ...

Если в функции есть цикл и условие в цикле, то идиома может быть немного другая, например:

def is_check_passed():
    for ...:
        ...
        if некое_условие:
            ...
            return False
    return True

if is_check_passed():
    ...

В этом случае, если условие ни разу не сработает, то вернётся True, иначе вернётся False. Можно сделать и наоборот. Можно сделать как угодно, всё на ваше усмотрение.

→ Ссылка