Как сократить часть с if-ами?

deck = Deck(deck_size)
for _ in range(commands):
    cmd = input().strip().split()

    if cmd[0] == CMD_POP_FRONT:
        try:
            print(deck.pop_front())
        except ValueError:
            print('error')
        continue

    if cmd[0] == CMD_POP_BACK:
        try:
            print(deck.pop_back())
        except ValueError:
            print('error')
        continue

    if cmd[0] == CMD_PUSH_FRONT:
        try:
            deck.push_front(int(cmd[1]))
        except OverflowError:
            print('error')
        continue

    if cmd[0] == CMD_PUSH_BACK:
        try:
            deck.push_back(int(cmd[1]))
        except OverflowError:
            print('error')

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

Автор решения: GrAnd
deck = Deck(deck_size)
for _ in range(commands):
    cmd = input().strip().split()
    try:
        if   cmd[0] == CMD_POP_FRONT:
            print(deck.pop_front())
        elif cmd[0] == CMD_POP_BACK:
            print(deck.pop_back())
        elif cmd[0] == CMD_PUSH_FRONT:
            deck.push_front(int(cmd[1]))
        elif cmd[0] == CMD_PUSH_BACK:
            deck.push_back(int(cmd[1]))
    except (ValueError, OverflowError):
        print('error')

Или сделать что-то вроде map'ы функций и вызывать по ней.

cmd_func = {CMD_POP_FRONT : lambda *x: print(deck.pop_front())   ,
            CMD_POP_BACK  : lambda *x: print(deck.pop_back())    ,
            CMD_PUSH_FRONT: lambda *x: deck.push_front(int(x[0])),
            CMD_PUSH_BACK : lambda *x: deck.push_back(int(x[0]))
           }

deck = Deck(deck_size)
for _ in range(commands):
    cmd = input().strip().split()
    try:
        cmd_func[cmd[0]](*cmd[1:])
    except (ValueError, OverflowError):
        print('error')
→ Ссылка