Todas as exceções em Python são classes que herdam de uma base comum, BaseException. A maioria das exceções que você usará herda de Exception. É uma boa prática capturar exceções mais específicas primeiro e, se necessário, uma mais genérica depois.

BaseException
├── SystemExit
├── KeyboardInterrupt
├── GeneratorExit
└── Exception
├── ArithmeticError
│   ├── FloatingPointError
│   ├── OverflowError
│   └── ZeroDivisionError
├── LookupError
│   ├── IndexError
│   └── KeyError
└── ... (outras exceções como ValueError, FileNotFoundError, TypeError, etc.)

Exemplo de Ordem de except:

try:
    # Código
    minha_lista = [1, 2, 3]
    print(minha_lista[5]) # IndexError
    # meu_dicionario = {}
    # print(meu_dicionario['chave']) # KeyError
except IndexError:
    print("Erro: Índice fora dos limites da lista!")
except KeyError:
    print("Erro: Chave não encontrada no dicionário!")
except Exception as e: # Captura qualquer outra exceção que não seja Index ou Key
    print(f"Ocorreu um erro geral: {e}")