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 / countquandocounté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.
Desafio
FácilO 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: potionCaso contrário, imprima Slot , o número e is empty. Para a entrada 7, a saída é:
Slot 7 is emptyUm 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
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
1Strings em Profundidade
Métodos de StringBusca em StringsSubstituir e Remover EspaçosDividir e UnirRecapitulação - Verificação de Nome de Usuário4Dicionários - Parte 2
Dicionários aninhadosArrays de dicionáriosMesclando dicionáriosCopiando dicionáriosRevisão - Contador de frequência10Funções Avançadas
Retornando Múltiplos ValoresFunções Lambda Parte 1Funções Lambda Parte 2Revisão - Ordenação com LambdaFunções Recursivas Parte 1Funções Recursivas Parte 2Revisão - Somando Array Aninhado13Sistema de Gerenciamento de Estoque
Visão Geral do ProjetoAdicionar Item2Tomada de Decisões Avançada
Correspondência com VariáveisGuards de CorrespondênciaPadrões de ArrayPadrões de DicionárioVerificações de PertinênciaRevisão - Analisador de Comandos5Aplicativo de Agenda de Contatos
Exibir menuAdicionar contato8Gerenciador de Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno3Arrays multidimensionais
Fundamentos de arrays 2DAcessando elementos de arrays 2DLaços aninhados com arrays 2DRevisão - arrays 2DArrays irregularesPadrões comuns de arrays 2DRevisão - tabuleiro de jogo6Conjuntos com Dicionários
O que é um conjunto?Dicionário como conjuntoAdicionando e removendoUnião e interseçãoDiferença entre conjuntosRevisão - Removendo duplicatas9Agregação Avançada de Dados
Somando ValoresEncontrando o Mínimo e o MáximoOrdenação PersonalizadaRevisão - Ordenador de Dicionários12Tratamento básico de erros
O que é tratamento de erros?Validando a entradaCláusulas de guardaRetornando códigos de erroRevisão - Divisão seguraPratique por conta própria: Compilador de GDScript online