pl: Frage zum Wiki-Artikel „Fehlerbehandlung“

Beitrag lesen

problematische Seite

Exceptions sind kein Ersatz für Prüfungen.

Sind sie auch nicht. Aber sie vereinfachen den Programmablauf, z.B. so daß man bei einer fehlerhaften Benutzereingabe per Exception das Programm beendet wenn es keinen Sinn macht, es mit einer fehlerhaften Benutzereingabe weiterlaufen zu lassen.

Natürlich werden auch solche Exceptions aufgefangen, erstens damit der Benutzer eine Fehlermeldung kriegen und zweitens das Programm sauber beendet werden kann. Fängt man Exceptions nicht auf, meldet sich das Programm/Script mit einem Fehlercode != 0 an das Betriebssystem bzw. an die VM zurück, auf deutsch gesagt, es stirb.

Beispiel einer Fehlerbehandlung per Exception:

my $sca = Scaliger->new( date => $self->param('date') )
  || return $self->errmsg("$@");

Wobei da der Wurf der Exception bereits im Konstruktor der Klasse Scaliger erfolgt und an dieser Stelle aufgefangen wird. Anstelle der $sca~Instanz gibt der Konstruktor ein undef zurück und woran es gescheitert ist, steht in einer globalen Variable $@ z.B.: "Das eingegebene Datum ist nicht gültig!"

Nach diesem Prinzip, gestützt auf das Carp Module, setzen viele CPAN Autoren ihre Module auf, weil sich das doch tatsächlich so bewährt hat. Wobei Carp::croak() einen Backtrace liefert der genau auf die Zeile zeigt, wo's passiert ist, was jedoch hauptsächlich für den Entwickler gedacht ist:

my $person = Person->new() 
 || die $@;

# und in $@ steht z.B.: -name erforderlich at .... line 37.

Schönen Sonntag.