Hata yönetimi
try / catch / finally, $e.type ve yakalanmayan sinyaller.
try
$ad = $req.query.name
catch($e)
out("hata: " + $e.message)
finally
out("her durumda")
end trycatch ve finally isteğe bağlıdır ama en az biri bulunmalıdır.
Parametre üç biçimde yazılabilir; üçü de aynıdır:
catch($e)
catch $e
catchYakalanan değer#
Bir nesnedir: {type, message, file, line, column}.
try
session.set("sayac", 1)
catch($e)
if $e.type == "SessionConflictError" then
out("oturum çakıştı, yeniden deneniyor")
end if
end trytype hatayı mesaj metnine bakmadan ayırt etmeye yarar. Mesaja göre dallanmak, mesajın bir gün düzeltilmesiyle sessizce bozulurdu. Türü belirtilmemiş hatalarda "RuntimeError" gelir.
Ne yakalanmaz#
return, break ve continue yakalanmaz — yalnızca finally çalışır ve sinyal dışarı çıkar.
func bul($liste) as string
for $x in $liste
try
if $x.uygun then
return $x.ad # catch'e DÜŞMEZ, fonksiyondan çıkar
end if
catch($e)
out("atlandı")
end try
end for
return ""
end funcYakalansaydı bir fonksiyonun return'ü sessizce yutulurdu.
finally her durumda çalışır; kendi hatasını üretirse o öncelik kazanır.
catch değişkeni yalnızca catch bloğunda görünür.
Kendi hatanızı fırlatmak#
raise / throw henüz yok. Bugün bir hata durumunu dışarı taşımanın yolu dönüş değeridir:
func dogrula($veri) as object
if $veri.get("eposta") == null then
return {ok: false, hata: "eposta gerekli"}
end if
return {ok: true}
end funcAçılış çalıştırması#
Bu, kolayca gözden kaçan bir tuzak:
$j = $req.json
out($j.get("ad")) # açılışta $j null -> hataİki güvenli desen:
if $req.method == http_request.types.POST then
out($req.json.get("ad"))
end iftry
out($req.json.get("ad"))
catch($e)
out("veri yok")
end tryform("ad") / get("q") / header(...) yardımcıları zaten null döndüğü için koruma gerektirmez.
Üretimde hata sayfası#
lexer serve app.lexer --productiongeliştirme: sayfa calistirilamadi: /yol/app.lexer:25:19: tanimsiz degisken: $yok
üretim: sayfa calistirilamadi (olay: 4b17df5d3b21)Ayrıntı log dosyasına aynı kimlikle yazılır.