Melhor resposta
Quando uma operação aritmética excede os limites do tipo de variável, um OverflowError é gerado. Inteiros longos alocam mais espaço conforme os valores aumentam, então eles acabam aumentando MemoryError. No entanto, o tratamento de exceções de ponto flutuante não é padronizado. Inteiros regulares são convertidos em valores longos conforme necessário.
Exemplo
O código fornecido é reescrito para capturar a exceção da seguinte maneira
i=1
try:
f = 3.0**i
for i in range(100):
print i, f
f = f ** 2
except OverflowError as err:
print "Overflowed after ", f, err
Resposta
Assim como a maioria das outras linguagens de programação, o OverflowError em Python indica que uma operação aritmética excedeu os limites do tempo de execução atual do Python. Normalmente, isso ocorre devido a valores flutuantes excessivamente grandes, já que valores inteiros que são muito grandes optarão por aumentar MemoryErrors.