Как достать значение с оператора внутри функции

Нужно получить переменную с оператора и продолжить функции с помощью нее

async def get_info(call: CallbackQuery, bot: Bot):

    call_number = int(call.data.replace('server', '', 1).split('_')[1])
    print(call_number)

    global info
    global player_names
    global ip
    global port
    global fh_type

    if call_number == '1':
        server = server_1_ip
        return server

    elif call_number == '2':
        server = server_2_ip
        return server

    elif call_number == '3':
        server = server_3_ip
        return server

    elif call_number == '4':
        server = server_4_ip
        return server

    elif call_number == '5':
        server = server_5_ip
        return server

    elif call_number == '6':
        server = server_6_ip
        return server

    elif call_number == '7':
        server = server_7_ip
        return server

    elif call_number == '8':
        server = server_8_ip
        return server

    ip = str(server.split(',')[0])
    port = int(server.split(',')[1])
    fh_type = server.split(',')[2]

    address = (f"{ip}", port)
    print(address)

    info = a2s.info(address)
    players = a2s.players(address)

    print(info)
    print(players)

сверху прописанные переменные global если что нужны. я потом с ним буду работать


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

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

Если речь о переменной server, то нужно убрать все return - если какой-то из них срабатывает, то функция прекращает работу не доходя до блоков кода ниже.

Измененный код через словарь - более короткая запись:

async def get_info(call: CallbackQuery, bot: Bot):
    global info
    global player_names
    global ip
    global port
    global fh_type

    call_number = int(call.data.replace('server', '', 1).split('_')[1])
    print(call_number)

    server_dict = {
        1: server_1_ip,
        2: server_2_ip,
        3: server_3_ip,
        4: server_4_ip,
        5: server_5_ip,
        6: server_6_ip,
        7: server_7_ip,
        8: server_8_ip
    }

    # server выберется по соответствующему значению call_number
    # если не найдет - поставит значение по умолчанию (например, server_1_ip)
    # можно убрать - тогда будет возвращаться None
    server = server_dict.get(call_number, server_1_ip)

    ip = str(server.split(',')[0])
    port = int(server.split(',')[1])
    fh_type = server.split(',')[2]

    address = (f"{ip}", port)
    print(address)

    info = a2s.info(address)
    players = a2s.players(address)

    print(info)
    print(players)

Использование dict.get() позволяет настроить значение по умолчанию (на случай, когда call_number не попал ни в одно из возможных значений).

→ Ссылка