O que é um erro de tempo de execução?
Um erro de tempo de execução é um erro que acontece enquanto o programa está executando, quando uma operação não pode ser realizada com os valores que tem, como dividir por zero ou ler além do fim de uma lista. O programa para naquela linha, a menos que o erro seja tratado.
Atualizado em 24 de setembro de 2026
Um erro de tempo de execução espera até o programa já estar executando. O código passa por todas as verificações antes de começar, executa corretamente por um tempo e então chega a uma operação que não pode ser realizada com os valores que tem naquele momento. Esta função funciona para uma lista e falha para outra:
85.0
Traceback (most recent call last):
File "main.py", line 5, in <module>
print(average([]))
^^^^^^^^^^^
File "main.py", line 2, in average
return sum(scores) / len(scores)
~~~~~~~~~~~~^~~~~~~~~~~~~
ZeroDivisionError: division by zero
A primeira chamada imprime 85.0. A segunda passa uma lista vazia, então len(scores) é 0 e a divisão não pode acontecer. Não havia nada de errado com a gramática, então isso não é um erro de sintaxe. O problema só existe para certos dados, e é por isso que um erro de tempo de execução pode aparecer depois de um programa ter funcionado corretamente cem vezes.
O que acontece quando ocorre um erro de tempo de execução
- O programa chega a uma operação, aqui
sum(scores) / len(scores). - O runtime a verifica antes de realizá-la. O CPython testa o divisor antes de dividir, a JVM verifica todo índice de array, e o Python verifica se uma chave de dicionário existe antes de devolver o valor.
- A verificação falha, então o runtime cria um objeto de erro. Em Python e Java esse objeto é uma exceção, e ele registra o tipo do erro, uma mensagem e onde aconteceu.
- O runtime procura código que trate esse tipo de erro, primeiro na função atual, depois na função que a chamou, e assim por diante para fora.
- Se nada trata o erro, o programa para. O Python imprime um traceback e sai com status 1. O Java imprime um stack trace que começa com
Exception in thread "main".
Linguagens sem essas verificações se comportam de outro jeito. O C não verifica índices de array nem ponteiros, então um acesso inválido à memória ou corrompe dados em silêncio ou faz o sistema operacional encerrar o programa com uma falha de segmentação.
Tudo o que o programa fez antes da linha que falhou já aconteceu. Este loop imprime três cores antes de falhar na quarta:
red
green
blue
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(colors[i])
~~~~~~^^^
IndexError: list index out of range
Como ler um traceback
Leia um traceback do Python de baixo para cima. A última linha diz o tipo do erro e a mensagem: ZeroDivisionError: division by zero. As linhas acima listam a cadeia de chamadas, da mais antiga para a mais recente. No primeiro exemplo, a linha 5 chamou average, e a linha 2, dentro de average, é onde a divisão falhou.
A linha onde o erro aconteceu nem sempre é a linha a mudar. A linha 2 de average está correta. A pergunta real é como uma lista vazia chegou até ela, então siga o valor ruim de volta até de onde ele veio e corrija ali. Quando um traceback passa por arquivos de bibliotecas que você não escreveu, procure a última linha que aponta para o seu próprio arquivo.
Erros de tempo de execução comuns
Cada uma destas mensagens foi copiada do Python 3.12.
| Erro | Exemplo | Mensagem |
|---|---|---|
ZeroDivisionError | 10 / 0 | division by zero |
IndexError | ["red", "green", "blue"][3] | list index out of range |
KeyError | {"theme": "dark"}["font"] | 'font' |
ValueError | int("twenty") | invalid literal for int() with base 10: 'twenty' |
TypeError | "Total: " + 5 | can only concatenate str (not "int") to str |
AttributeError | chamar .upper() em None | 'NoneType' object has no attribute 'upper' |
FileNotFoundError | open("missing.txt") | [Errno 2] No such file or directory: 'missing.txt' |
RecursionError | uma função que chama a si mesma para sempre | maximum recursion depth exceeded |
O Java tem equivalentes diretos, como ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException e NullPointerException. Uma divisão inteira por zero que nada captura imprime isto em Java:
Exception in thread "main" java.lang.ArithmeticException: / by zero
O JavaScript é mais tolerante com números: 10 / 0 é Infinity, não um erro. Ele falha quando você usa um valor que não existe. O Node.js imprime isto para user.name quando user é undefined:
TypeError: Cannot read properties of undefined (reading 'name')
Como corrigir um erro de tempo de execução
- Reproduza o erro. Execute o programa de novo com a mesma entrada e confirme que recebe o mesmo erro.
- Leia a última linha do traceback e depois encontre a linha correspondente no seu próprio código.
- Olhe os valores envolvidos. Imprima esses valores logo antes da linha que falha, ou pare ali com um breakpoint do depurador.
- Corrija a causa. Acerte o índice, proteja o caso especial ou valide a entrada antes de usá-la.
Para a função average, a correção é decidir qual deve ser a média de nenhuma nota e dizer isso no código:
85.0
0
Algumas falhas estão fora do seu controle: um arquivo que foi apagado, uma rede que excede o tempo limite, um usuário que digita letras onde deveria haver um número. Você não consegue evitá-las corrigindo código, então você as captura com tratamento de exceções e decide o que o programa faz em seguida. O que você não deve fazer é envolver um bug em try e escondê-lo. Um IndexError vindo de um loop que conta um passo a mais é um erro a corrigir, não um erro a capturar.
Mensagens de runtime error no Windows e no Excel
O termo também aparece fora do seu próprio código. Uma janela do Windows com o título Microsoft Visual C++ Runtime Library e as palavras Runtime Error! significa que um programa escrito em C++ encontrou um erro fatal e o runtime do C++ o encerrou. Como usuário você não pode mudar esse código, então as soluções habituais são atualizar o programa, reparar ou reinstalar os pacotes Microsoft Visual C++ Redistributable e, no caso de jogos, atualizar o driver de vídeo.
Macros do Excel escritas em VBA informam erros de tempo de execução numerados. Run-time error '9': Subscript out of range significa que a macro pediu uma planilha ou um elemento de array que não existe, e Run-time error '1004' é um erro genérico lançado quando uma operação em uma pasta de trabalho, planilha ou intervalo falha. A ideia é a mesma do Python: um código válido encontrou um valor que não conseguia tratar.
Próximos passos
Os erros de tempo de execução têm dois irmãos: o erro de sintaxe, encontrado antes de o programa começar, e o erro de lógica, que nunca produz mensagem nenhuma. Para se recuperar de erros de tempo de execução em vez de travar, leia tratamento de exceções e depois os guias de Python sobre exceções e depuração de erros. No curso de Python você escreve e corrige código como este em todas as lições.
Perguntas frequentes
Qual é a diferença entre erro de tempo de execução e erro de sintaxe?
Por que eu vivo recebendo erros de tempo de execução?
O que significa Runtime Error no LeetCode?
None, ou uma recursão tão profunda que estoura a pilha. Execute você mesmo a entrada que falhou, mostrada na página de resultados, e verifique os casos extremos: um array vazio, um único elemento e o maior tamanho permitido.Um erro de tempo de execução é o mesmo que uma exceção?
RuntimeException também é o nome de uma família específica de exceções, as não verificadas, como NullPointerException.