diese einfache Klasse vor:Wie kann ich strukturierte Ausnahmen von Moose bekommen?
package Foo;
use Moose;
has foo => (is => 'rw', isa => 'Int');
Und dann diesen Code:
use Try::Tiny;
use Foo;
my $f = try {
Foo->new(foo => 'Not an Int');
}
catch {
warn $_;
};
Der Code stirbt mit einer schönen großen Fehlermeldung über Fehler Typen Einschränkungen.
Ich möchte in der Lage zu extrahieren, welches Attribut fehlgeschlagen (foo
), was der Grund war (fehlgeschlagen Typ Einschränkung) und was der Wert übergeben wurde (Not an Int
) ohne eine Fehlerzeichenfolge zu analysieren, um die Informationen zu erhalten.
Etwas wie folgt aus:
catch {
if($_->isa('MooseX::Exception::TypeConstraint')) {
my $attrib = $_->attribute;
my $type = $_->type;
my $value = $_->bad_value;
warn "'$value' is an illegal value for '$attrib'. It should be a $type\n";
}
else {
warn $_;
}
};
Ist das möglich? Gibt es eine MooseX-Distribution, die das möglich macht? Besser noch, gibt es eine Moose-Funktion, die ich vermisst habe, die das möglich macht?
Update: Ich bin besonders interessiert an Typ Einschränkungen, aber andere Moose Fehler wären auch sehr gut. Mir ist auch bewusst, dass ich Objekte mit die
werfen kann. Strukturieren von Ausnahmen in Code, den ich schreibe, ist also relativ einfach.
Das ist sehr interessant.Es funktioniert wie MooseX :: Throwable, baut aber auf Exception :: Class auf und definiert die Anfänge einer Ausnahmeklassenhierarchie. Intern analysiert es die Fehlermeldung, um festzustellen, welche Art von Ausnahme ausgelöst werden soll. – daotoad
Leider wurde es für eine Weile nicht aktualisiert und versagt seine Tests ziemlich überall. –