Hata Yönetimi Nedir?
Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 66 / 78.
Bir program, bir hata nedeniyle ortasında durabilir. Bu kod, yalnızca üç öğesi olan bir dizinin 5 numaralı yuvasını ister:
var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")Godot, Out of bounds get index '5' hatasını bildirir ve işlev bu satırda durur; bu nedenle Done hiçbir zaman yazdırılmaz. Bu bir çalışma zamanı hatasıdır: kod geçerlidir, ancak çalışırken aldığı bir değer bir satırın yürütülmesini imkânsız hâle getirir.
En sık karşılaşacağınız çalışma zamanı hataları şunlardır:
countdeğeri0olduğunda10 / countörneğinde olduğu gibi bir tam sayıyı sıfıra bölmek (%için de aynı durum geçerlidir)player["mana"]örneğinde olduğu gibi köşeli parantezlerle mevcut olmayan bir anahtarı okumak- yukarıdaki
inventory[5]örneğinde olduğu gibi dizi sınırlarının dışında bir indeks kullanmak
Python ve Java, bir hata oluştuktan sonra try ve except veya catch ile hatayı yakalayabilir. GDScript'te istisnalar ve try yoktur. GDScript'te hata yönetimi, başarısız olabilecek satırdan önce değerleri kontrol etmek ve bunun yerine ne yapılacağına karar vermek anlamına gelir:
if slot >= 0 and slot < inventory.size():
print(inventory[slot])
else:
print("Slot ", slot, " is empty")Kontrol için her iki parça da gereklidir. -1 gibi negatif bir dizin hata değildir: dizinin sonundan okuma yapar; bu, bir yuva numarasının ifade ettiği şey değildir.
Hata, çağırdığın bir fonksiyonun içinde gerçekleştiğinde o fonksiyon durur ve 0 veya null gibi boş bir değer döndürür; çağıran kod da bu yanlış değerle devam eder. Bazı hatalar herhangi bir hata oluşturmadan yanlış bir değer verir: int("abc") sonucu 0 olur.
Görev
Kolayinventory dizisinin dört yuvası vardır ve yuvalar 0'dan başlayarak numaralandırılır. Program bir satır girdi okur: bir yuva numarası (negatif olabilen bir tam sayı).
Yuva mevcutsa Slot , numarayı, : ve öğeyi yazdır. 2 girdisi için çıktı şöyledir:
Slot 2: potionAksi takdirde Slot , numarayı ve is empty yazdır. 7 girdisi için çıktı şöyledir:
Slot 7 is emptyNegatif bir sayı hiçbir zaman yuva numarası olamaz: -1 için Slot -1 is empty yazdır. Program hiçbir zaman bir hatayla durmamalıdır.
Kendin dene
extends Node
func _ready():
var inventory := ["sword", "shield", "potion", "bow"]
var slot := int(OS.read_string_from_stdin())
# Yuvadaki öğeyi yazdır veya yuvanın boş olduğunu belirt
pass
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1String’leri Derinlemesine İnceleme
String MetotlarıString’lerde AramaDeğiştirme ve KırpmaBölme ve BirleştirmeTekrar: Kullanıcı Adı Kontrolü4Sözlükler Bölüm 2
İç İçe SözlüklerSözlük DizileriSözlükleri BirleştirmeSözlükleri KopyalamaTekrar - Frekans Sayacı10İleri Düzey Fonksiyonlar
Birden Fazla Değer DöndürmeLambda Fonksiyonları Bölüm 1Lambda Fonksiyonları Bölüm 2Tekrar - Lambda ile SıralamaÖzyinelemeli Fonksiyonlar Bölüm 1Özyinelemeli Fonksiyonlar Bölüm 2Tekrar - İç İçe Dizilerin Toplamı13Envanter Yönetim Sistemi
Projeye Genel BakışÜrün Ekle2İleri Düzey Karar Verme
Değişkenlerle EşleştirmeEşleştirme KoşullarıDizi KalıplarıSözlük KalıplarıÜyelik KontrolleriÖzet - Komut Ayrıştırıcı5Rehber Uygulaması
Menüyü GörüntüleKişi Ekle8Öğrenci Kayıt Yöneticisi
Proje Genel BakışıÖğrenci Ekle11Üst Düzey Fonksiyonlar
map Metodufilter Metodureduce Metoduany ve allTekrar - E-posta DoğrulayıcıTekrar - Sayı İşleyici3Çok Boyutlu Diziler
2B Dizilere Giriş2B Dizi Elemanlarına Erişim2B Dizilerle İç İçe DöngülerTekrar - 2B DizilerDüzensiz DizilerYaygın 2B Dizi ÖrüntüleriTekrar - Oyun Tahtası6Sözlüklerle Kümeler
Küme Nedir?Küme Olarak SözlükEkleme ve SilmeBirleşim ve KesişimKüme FarkıTekrar: Yinelenenleri Silme9Gelişmiş Veri Toplama
Değerleri ToplamaEn Küçük ve En Büyük Değeri BulmaÖzel SıralamaÖzet - Sözlük Sıralayıcı12Temel Hata Yönetimi
Hata Yönetimi Nedir?Girdiyi DoğrulamaKoruma KoşullarıHata Kodları DöndürmeTekrar - Güvenli BölmeKendi başına pratik yap: Online GDScript derleyicisi