Menu
Coddy logo textTech

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.

Por Kevin Spektor, Cofundador e CTO

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

  1. O programa chega a uma operação, aqui sum(scores) / len(scores).
  2. 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.
  3. 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.
  4. 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.
  5. 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.

ErroExemploMensagem
ZeroDivisionError10 / 0division by zero
IndexError["red", "green", "blue"][3]list index out of range
KeyError{"theme": "dark"}["font"]'font'
ValueErrorint("twenty")invalid literal for int() with base 10: 'twenty'
TypeError"Total: " + 5can only concatenate str (not "int") to str
AttributeErrorchamar .upper() em None'NoneType' object has no attribute 'upper'
FileNotFoundErroropen("missing.txt")[Errno 2] No such file or directory: 'missing.txt'
RecursionErroruma função que chama a si mesma para sempremaximum 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

  1. Reproduza o erro. Execute o programa de novo com a mesma entrada e confirme que recebe o mesmo erro.
  2. Leia a última linha do traceback e depois encontre a linha correspondente no seu próprio código.
  3. Olhe os valores envolvidos. Imprima esses valores logo antes da linha que falha, ou pare ali com um breakpoint do depurador.
  4. 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?
Um erro de sintaxe é encontrado antes de o programa começar, porque o código quebra a gramática da linguagem, então nenhuma linha executa. Um erro de tempo de execução acontece depois, com o programa já executando, quando uma linha válida encontra um valor que não consegue tratar. Todas as linhas anteriores já executaram e podem ter impresso alguma saída.
Por que eu vivo recebendo erros de tempo de execução?
Em geral porque o código supõe algo sobre os dados que nem sempre é verdade: que uma lista nunca está vazia, que um arquivo existe, que o usuário digita um número. Cada suposição funciona para as entradas que você testou e falha para uma que você não testou. Teste com entradas vazias, zero, ausentes e muito grandes, e verifique ou trate esses casos explicitamente.
O que significa Runtime Error no LeetCode?
Significa que a sua solução compilou, mas travou em pelo menos um caso de teste. As causas mais comuns são um índice fora do intervalo, uma divisão por zero, o uso de um valor null ou 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?
Não exatamente. Em Python e Java, a maioria dos erros de tempo de execução é informada como exceção, e é isso que permite a um programa capturá-los. Mas linguagens como C têm erros de tempo de execução e nenhuma exceção. Em Java, RuntimeException também é o nome de uma família específica de exceções, as não verificadas, como NullPointerException.
Um compilador consegue detectar erros de tempo de execução?
Só alguns. Um compilador ou um verificador de tipos como o mypy pode provar que certos erros são impossíveis, por exemplo somar texto a um número. Mas ele não conhece os valores que chegam enquanto o programa executa, como um número digitado pelo usuário que acaba sendo zero. Esses erros só podem ser encontrados executando o código ou tratados verificando a entrada.
Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR