Par exemple, supposons que vous souhaitiez analyser certaines données et stocker uniquement des données spécifiques dans la base de données. Parmi eux, s'il y a une extension qui ne peut pas être analysée, une erreur se produira, le traitement sera interrompu et un bogue se produira.
Par conséquent, le traitement des exceptions est pratique et il est possible d'effectuer un traitement dans le cas d'un cas d'exception sans interrompre le traitement.
En effet, il est possible de réaliser «si donné, redonner, redonner».
Cette fois, regardons la gestion des exceptions en utilisant un simple calcul comme exemple.
Dans Ruby, lorsque j'essaye de diviser 10 par 0, j'obtiens une erreur.
python
puts 10 / 0
puts "Bonjour"
divided by 0 (ZeroDivisionError)
Le processus est interrompu au milieu.
Donc,
--Enclenchez la partie susceptible d'être la cible de l'erreur par begin
.
rescue
.python
begin
10 / 0
rescue
p "Ne casse pas à 0"
end
puts "Bonjour"
"Ne casse pas à 0"
"Bonjour"
Le traitement n'a pas été interrompu et le traitement des erreurs et le traitement normal ont été exécutés.
Sauvetage sans commencement
python
puts 10 / 0 rescue 0
puts 10 / nil rescue 0
0
0
python
begin
10 / 0
rescue => e
puts e
end
puts "Bonjour"
divided by 0
Bonjour
L'objet d'erreur est stocké dans la variable e et peut être généré.
python
begin
10 / 0
rescue NoMethodError
puts "Il n'y a pas de telle méthode"
rescue ZeroDivisionError
puts "Ne casse pas à 0"
end
Ne casse pas à 0
Puisqu'il correspond au deuxième message d'erreur, il répond au sauvetage.
Si le parent de la classe d'exception cible est décrit en premier, il sera traité en premier.
python
begin
10 / 0
rescue StandardError
puts "Erreur de base"
rescue ZeroDivisionError
puts "Ne casse pas à 0"
end
Erreur de base
L'utilisation prévue est
python
begin
raise NoMethodError
rescue => e
p e
end
NoMethodError
Héritons de la classe d'exception (classe StandardError).
python
class Hoge < StandardError
end
begin
raise Hoge
rescue => e
p e
end
#<Hoge: Hoge>
python
num = 0
begin
puts 10 / num
rescue ZeroDivisionError => e
puts e
num = 1
retry
end
puts "Fini"
divided by 0
10
Fini
Dans la première boucle, il y a eu une erreur Dans la deuxième boucle, le traitement est effectué normalement.
python
begin
puts "Pas exception"
rescue => e
puts e
ensure
puts "Hello"
end
Pas exception
Hello
s'assurer est toujours effectuée à tout moment.
python
begin
10 / 0
rescue => e
puts e.class
puts e.class.superclass
puts e.class.superclass.superclass
puts e.class.superclass.superclass.superclass
end
ZeroDivisionError
StandardError
Exception
Object
Exception est la classe source et Object est son parent
Recommended Posts