Ruby/Przetwarzanie wyjątków: rescue: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 1:
== Przetwarzanie wyjątków: rescue ==
Wykonujący się program może napotkać na niespodziewane problemy. Plik, które chce odczytać może nie istnieć, dysk może być pełny, gdy
<pre>
ruby> file = open("
ERR: (eval):1:in `open': No such file or directory -
</pre>
Solidny program powinien radzić sobie z takimi sytuacjami sensownie i wdzięcznie. Sprostanie temu wymaganiu może być irytującym zadaniem. Od programistów języka C oczekuje się sprawdzania wyniku każdego wywołania systemowego które potencjalnie mogło się nie powieść oraz natychmiastowego
<pre>
FILE *
if (
fprintf( stderr, "
exit(1);
}
if (
/*
}
...
</pre>
Jest to bardzo męcząca praktyka, którą programiści mają w zwyczaju traktować niedbale i pomijać, czego rezultatem jest to, że program
W Rubim, tak jak w wielu współczesnych językach programowania, możemy radzić sobie z wyjątkami poszczególnych bloków kodu
<pre>
def pierwsza_linia(nazwa_pliku)
begin
info = file.gets
info # Ostatnia obliczona rzecz jest
rescue
nil # Nie
end
end
</pre>
Będą występować sytuacje, gdy będziemy chcieli
<pre>
begin
rescue
end
begin
# ...
rescue
# ...
end
</pre>
Linia 59:
<pre>
begin
# ...
rescue
retry
end
Linia 71:
Jednakże, mamy tutaj pewną wadę. Nieistniejący plik sprawi, że pętla ta będzie powtarzana w nieskończoność. Musisz zwracać uwagę na tego rodzaju pułapki podczas przetwarzania wyjątków.
Każda biblioteka Rubiego podnosi wyjątek jeśli wystąpi jakiś błąd. Ty również możesz podnosić wyjątki jawnie w
<pre>
ruby> raise "
ruby> begin
| raise "test2"
| rescue
| puts "
| end
nil
</pre>
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Stałe klasowe|poprz=Stałe klasowe|nastart=Ruby/Przetwarzanie wyjątków: ensure|nast=Przetwarzanie wyjątków: ensure}}
</noinclude>
|