오류 처리란?
Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 66번째.
프로그램은 오류 때문에 실행 도중 멈출 수 있습니다. 이 코드는 요소가 세 개뿐인 배열의 5번 슬롯을 요청합니다:
var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")Godot은 Out of bounds get index '5'를 보고하고 함수는 해당 줄에서 중단되므로 Done은 출력되지 않습니다. 이는 런타임 오류입니다. 코드는 유효하지만, 실행 중에 가져온 값 때문에 한 줄을 실행할 수 없습니다.
가장 자주 접하는 런타임 오류는 다음과 같습니다:
count가0일 때10 / count와 같이 정수를 0으로 나누는 경우(%도 마찬가지)player["mana"]와 같이 대괄호를 사용해 존재하지 않는 키를 읽는 경우- 위의
inventory[5]와 같이 배열의 범위를 벗어난 인덱스를 사용하는 경우
Python과 Java는 try와 except 또는 catch를 사용해 오류가 발생한 후 잡을 수 있습니다. GDScript에는 예외가 없으며 try도 없습니다. GDScript에서 오류를 처리한다는 것은 실패할 수 있는 줄을 실행하기 전에 값을 확인하고, 대신 무엇을 할지 결정하는 것을 의미합니다.
if slot >= 0 and slot < inventory.size():
print(inventory[slot])
else:
print("Slot ", slot, " is empty")검사에는 두 부분이 모두 필요합니다. -1과 같은 음수 인덱스는 오류가 아닙니다. 배열의 끝에서부터 읽으므로, 슬롯 번호가 의미하는 것과는 다릅니다.
호출한 함수 내부에서 오류가 발생하면 해당 함수는 중단되고 0 또는 null과 같은 빈 값을 반환하며, 호출한 쪽은 그 잘못된 값을 가지고 계속 진행합니다. 일부 실수는 오류 없이 잘못된 값을 반환합니다. int("abc")는 0입니다.
챌린지
쉬움배열 inventory에는 네 개의 슬롯이 있으며, 번호는 0부터 시작합니다. 프로그램은 입력 한 줄을 읽습니다. 슬롯 번호(음수일 수도 있는 정수)입니다.
슬롯이 존재하면 Slot , 번호, : 및 항목을 출력합니다. 입력이 2인 경우 출력은 다음과 같습니다.
Slot 2: potion그렇지 않으면 Slot , 번호 및 is empty를 출력합니다. 입력이 7인 경우 출력은 다음과 같습니다.
Slot 7 is empty음수는 슬롯 번호가 될 수 없습니다. -1인 경우 Slot -1 is empty를 출력합니다. 프로그램은 오류와 함께 중단되어서는 안 됩니다.
직접 해보기
extends Node
func _ready():
var inventory := ["sword", "shield", "potion", "bow"]
var slot := int(OS.read_string_from_stdin())
# 슬롯에 있는 아이템을 출력하거나, 슬롯이 비어 있음을 출력하세요
pass
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러