İçeriğe geç
LexerLangv0.1.0

Hata yönetimi

try / catch / finally, $e.type ve yakalanmayan sinyaller.

LexerLang
try
    $ad = $req.query.name
catch($e)
    out("hata: " + $e.message)
finally
    out("her durumda")
end try

catch ve finally isteğe bağlıdır ama en az biri bulunmalıdır.

Parametre üç biçimde yazılabilir; üçü de aynıdır:

LexerLang
catch($e)
catch $e
catch

Yakalanan değer#

Bir nesnedir: {type, message, file, line, column}.

LexerLang
try
    session.set("sayac", 1)
catch($e)
    if $e.type == "SessionConflictError" then
        out("oturum çakıştı, yeniden deneniyor")
    end if
end try

type 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.

LexerLang
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 func

Yakalansaydı 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:

LexerLang
func dogrula($veri) as object
    if $veri.get("eposta") == null then
        return {ok: false, hata: "eposta gerekli"}
    end if
    return {ok: true}
end func

Açılış çalıştırması#

Bu, kolayca gözden kaçan bir tuzak:

LexerLang
$j = $req.json
out($j.get("ad"))          # açılışta $j null -> hata

İki güvenli desen:

LexerLang
if $req.method == http_request.types.POST then
    out($req.json.get("ad"))
end if
LexerLang
try
    out($req.json.get("ad"))
catch($e)
    out("veri yok")
end try

form("ad") / get("q") / header(...) yardımcıları zaten null döndüğü için koruma gerektirmez.

Üretimde hata sayfası#

Terminal
lexer serve app.lexer --production
Metin
geliş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.

Sırada#

Yönlendirme.