Menu
CoddyTech

O que é tratamento de erros?

Parte da seção Lógica e fluxo do Journey de GDScript da Coddy. Lição 66 de 78.

Um programa pode parar no meio por causa de um erro. Este código solicita o índice 5 de um array que tem apenas três elementos:

var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")

Godot informa Out of bounds get index '5' e a função para nessa linha, então Done nunca é exibido. Isso é um erro de tempo de execução: o código é válido, mas um valor obtido durante a execução torna impossível executar uma linha.

Os erros de execução que você encontra com mais frequência são:

  • dividir um número inteiro por zero, como em 10 / count quando count é 0 (o mesmo vale para %)
  • ler uma chave inexistente usando colchetes, como em player["mana"]
  • um índice fora do array, como em inventory[5] acima

Python e Java podem capturar um erro depois que ele acontece, com try e except ou catch. GDScript não tem exceções nem try. O tratamento de erros em GDScript significa verificar os valores antes da linha que poderia falhar e decidir o que fazer em vez disso:

if slot >= 0 and slot < inventory.size():
	print(inventory[slot])
else:
	print("Slot ", slot, " is empty")

A verificação precisa das duas partes. Um índice negativo, como -1, não é um erro: ele lê a partir do fim do array, o que não é o significado de um número de posição.

Quando o erro acontece dentro de uma função que você chamou, essa função para e retorna um valor vazio, como 0 ou null, e quem a chamou continua com esse valor incorreto. Alguns erros geram um valor incorreto sem nenhum erro: int("abc") é 0.

challenge icon

Desafio

Fácil

O array inventory tem quatro posições, numeradas a partir de 0. O programa lê uma linha de entrada: um número de posição (um número inteiro, possivelmente negativo).

Se a posição existir, imprima Slot , o número, : e o item. Para a entrada 2, a saída é:

Slot 2: potion

Caso contrário, imprima Slot , o número e is empty. Para a entrada 7, a saída é:

Slot 7 is empty

Um número negativo nunca é uma posição: para -1, imprima Slot -1 is empty. O programa nunca deve parar com um erro.

Experimente você mesmo

extends Node

func _ready():
	var inventory := ["sword", "shield", "potion", "bow"]
	var slot := int(OS.read_string_from_stdin())

	# Imprima o item no slot ou informe que o slot está vazio
	pass
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e fluxo

Pratique por conta própria: Compilador de GDScript online