Obsługa wyjątków w Ruby

Obsługa wyjątków w Ruby
Obsługa wyjątków odnosi się do procesu przewidywania i definiowania sposobów obsługi błędów podniesionych w programie podczas wykonywania. Błąd w większości przypadków odnosi się do nieoczekiwanego zdarzenia lub wystąpienia podczas wykonywania programu. Na przykład błąd może wystąpić podczas czytania pliku albo z powodu nie istniejącego pliku lub użytkownika nie ma odpowiedniej zgody na odczyt lub zapisanie do pliku.

Ten samouczek pokaże, jak wdrożyć obsługę wyjątków w Ruby za pomocą bloków ratowniczych i ratowniczych.

Podstawowe użycie

Większość języków programowania wdraża obsługę wyjątków za pomocą bloku Try i Catch. Jednak, podobnie jak wszystko inne w Ruby, słowa kluczowe są bardziej opisowe.

Możemy wyrazić ogólną składnię, jak pokazano poniżej:

zaczynać
Raiseexception
# Podnieś ECXPORCJA
Wyjątek ratowniczy
# Blok ratunkowy
koniec

Załączamy blok obsługi wyjątków w instrukcji początkowej i końcowej. W tych stwierdzeniach definiujemy bloki podnoszenia i ratownicze.

W Raise definiujemy wyjątek, który możemy podnieść ręcznie lub sprawić, by interpreter rubinowy go wygeneruje. Domyślnie parametr bloku podnoszenia jest RuntimeerRor

Następnie jest blok ratunkowy. Jak sama nazwa wskazuje, blok ten przychodzi na ratunek, gdy pojawia się wyjątek. Przejmuje kontrolę nad wykonaniem programu.

Ruby porównuje wyjątek podniesiony z bloku podnoszenia w stosunku do parametrów przekazanych do bloku ratowniczego. Jeśli wyjątek jest tego samego typu lub nadklasy, uruchamia blok ratunkowy.

Przykład obsługi wyjątków w Ruby

Możemy zaimplementować prosty przykład ilustrujący, jak działa obsługa wyjątków w Ruby:

def err_me
zaczynać
stawia „Cześć!"
Podnieś „typ ciągów”
ratunek
Wkłada „Nieważne, jestem naprawiony!"
koniec
koniec
err_me

W powyższym przykładzie definiujemy funkcję z blokiem wyjątków.

Ręcznie podnosimy wyjątek, który przerywa przepływ wykonania programu i wchodzi do bloku ratowniczego. Wykonuje to działania w bloku w tej sprawie, instrukcja PUT i wyjścia.

Jeśli dodasz jakikolwiek blok kodu natychmiast po podwyżieniu i przed blokiem ratunkowym, nie wykonują one, ponieważ blok ratunkowy natychmiast obsługuje przepływ programu.

Domyślnie blok ratunkowy używa parametru StandarderRor. Istnieją jednak inne rodzaje błędów w Ruby, w tym.

  1. Błąd składni
  2. Ioerror
  3. RegExperror
  4. ThreadError
  5. ZerodivisionError
  6. Nomethoderror
  7. Indekserorror
  8. Nameerror
  9. Typeerror

I więcej.

Aby podnieść i obsługiwać określony typ błędu, możemy przekazać go do bloku podnoszenia jako parametr. Oto przykład:

zaczynać
RaiseZerodivisionError
ratowanie => wyjątek
stawia wyjątek.wiadomość
stawia wyjątek.Cofnij się.sprawdzać
koniec

W powyższym przykładzie podnosimy zerodivisionError. Następnie wskakujemy do bloku ratowniczego, który drukuje określony typ wyjątku i śledzi źródło.

Powstałe wyjście to:

$ Ruby Erm Loting.RB
ZerodivisionError
[”Obsługa błędów.RB: 2: w '' "]

Inne bloki wyjątków

Oprócz głównego bloku podnoszenia i ratownictwa, Ruby zapewnia nam również inne bloki, które możemy zaimplementować, aby obsłużyć błędy.

Zawierają:

Blok ponownej

Blok ponownej próby służy do ponownego uruchomienia bloku ratowniczego po podniesieniu wyjątku. Oto przykład:

zaczynać
podnieś zerodivisionerRor
umieszcza „Nie biegam 😢”
ratowanie => wyjątek
umieszcza „#wyjątek.Wiadomość spowodowała, że ​​umarłem ⚰️ "
spróbować ponownie
koniec

Jeśli uruchomimy powyższy kod, wydrukuje wiadomość wewnątrz bloku ratowniczego. Napotka blok ponownego wypowiedzi, który wskakuje do bloku ratowniczego.

Wspólnym przypadkiem użycia bloków ponownych jest badanie błędów za pomocą brutalnej siły. Przykładem byłoby przeładowanie strony, gdy połączenie nie będzie opóźnione, dopóki błąd nie zostanie rozwiązany.

OSTROŻNOŚĆ: Zachowaj ostrożność podczas korzystania z bloku ponownego, ponieważ jest powszechnym źródłem nieskończonych pętli.

Zapewnij blok

Jeśli zaprogramowałeś w innym języku, takim jak Python, prawdopodobnie znasz w końcu blok. Upewnij się, że blok w Ruby działa podobnie do bloku wreszcie w innych językach programowania.

Upewnij się, że blok zawsze działa na końcu kodu. Niezależnie od tego, czy podniesiony wyjątek został poprawnie obsługiwany, czy też realizacja programu, zawsze działa lub wykonuje.

Oto przykład:

zaczynać
podnieś zerodivisionerRor
umieszcza „Nie biegam 😢”
ratowanie => wyjątek
umieszcza „#wyjątek.Wiadomość spowodowała, że ​​umarłem ⚰️ "
zapewnić
stawia „Zawsze będę biegać”
koniec

W takim przypadku powyższy kod wydrukuje komunikat wyjątku i wreszcie uruchomi blok upewnienia się.

ZerodivisionError spowodował, że umarłem ⚰️
Zawsze będę biegać 🚀

Jeszcze blok

Jeśli nie zostanie podniesiony wyjątek, możemy zaimplementować blok, aby wykonać akcję za pomocą instrukcji ENE ENE.

Na przykład:

zaczynać
ratowanie => wyjątek
umieszcza „#wyjątek.Wiadomość spowodowała, że ​​umarłem ⚰️ "
w przeciwnym razie
stawia „zaufaj mi, pobiegłem z powodzeniem 😀”
zapewnić
Umieszcza „i zawsze będę biegać 🚀”
koniec

Oczywiście blok jest umieszczony między ratunkiem i zapewnia blok. W powyższym przykładzie zauważysz, że brakuje mu bloku podnoszenia, co powoduje, że blok z.

Oto przykład wyjścia:

Zaufanie Ja, Pobiegłem z powodzeniem 😀

I zawsze będę biegał 🚀

Lekkie obsługi wyjątków

Bloki podnoszenia i ratownictwa są przydatnym sposobem wykonywania akcji, gdy wystąpi błąd. Ponieważ jednak obsługa błędów buduje ślad stosu, który pomaga w debugowaniu, może łatwo stać się problematyczne w twoim programie. W tym miejscu wchodzą bloki połowów i rzutów.

Aby zaimplementować blok rzutów, zaczynasz od zdefiniowania etykiety za pomocą słowa kluczowego Catch. Gdy Ruby napotyka blok rzutów, który odwołuje się do bloku połowowego, zatrzymuje wykonanie i przeskakuje do bloku połowowego.

Użyjmy przykładu, aby zilustrować tę koncepcję. Rozważ niechlujne gniazdowanie pokazane w poniższym kodzie:

catch (: zabójcy_now)
langs = [„Python”, „Ruby”, „C ++”, „C#”]
FOIINLANGSDO
dla indeksu w 1… 5
Jeśli indeks == 3
ifi == "c#"
stawia „po rzucie, nic nie ucieknie!''
rzut (: zabójcy_now)
Umieszcza „I Am C#”
koniec
koniec
koniec
koniec
koniec
stawia „Och, chłopcze! To było długie!"

Zaczynamy od użycia słowa kluczowego Catch i przekazywania etykiety wewnątrz pary nawiasów. Po uruchomieniu kodu wykona on wszystkie zagnieżdżone pętle i jeśli instrukcje, dopóki nie napotknie instrukcji rzucania odwołującego się do połowu.

To natychmiast zakończy wykonywanie i wyjście z powrotem na poziom instrukcji połowowej.

Oto przykład wyjścia:

Po rzuceniu nic nie ucieknie!'
o chłopie! To było długie!

Wniosek

Ten samouczek pokazał, jak wdrożyć obsługę błędów w Ruby za pomocą bloków ratowniczych i ratowniczych.