Ich versuche derzeit, Modell-Ergebnisinformationen aus H2O in Python zu extrahieren.Python: Pass-Funktion als Argument, mit try/except auswerten und Ergebnis zurückgeben
Für Kontext, ich habe etwas in den folgenden Zeilen:
model = H2ODeepLearningEstimator(...)
model.train()
Nachdem das Modell trainiert wird, kann ich die verschiedenen Modellmetriken aufrufen. Einige Metrikwerte werden jedoch nur in Abhängigkeit vom Typ des Modells generiert.
So könnte ich zum Beispiel model.mse(valid=True)
aufrufen und es wird einen Wert zurückgeben. aber wenn ich rufe model.aic(valid=True)
wird es werfen und Ausnahme, wenn AIC nicht generiert wurde. Dies ist ein Problem, da ich eine Funktion generieren muss, die alle generierten Metriken in eine HIVE-Tabelle schreibt. Wenn die Metrik nicht generiert wurde und der Aufruf eine Ausnahme auslöst, schreiben wir einfach NULL in die Struktur.
Also, ich habe versucht, die folgendes zu tun:
param=None
try:
param=tryParam(model.aic())
except:
pass
print(param)
Das wird richtig zurückkehren None
für den AIC-Wert
Ich brauche aber diese für jeden Parameter zu tun, so würde es vorziehen, wickle eine generische Funktion um ihn herum. Ich möchte zum Beispiel die Funktion model.aic()
als Parameter an eine Funktion mit dem Namen tryParam
übergeben, die sie dann auswertet und alle auftretenden Expectationen abfängt. Wie zum Beispiel:
def tryParam(getParam):
try:
return getParam
except:
return None
tryParam(model.aic())
tryParam(model.mse())
tryParam(model.mae())
etc.
Dies funktioniert jedoch nicht. Wenn ich tryParam(model.aic())
rufe, wird die Ausnahme ausgelöst und das Programm stoppt. Es scheint mir, dass der Parameter ausgewertet wird, bevor er an tryParam
übergeben wird (wodurch die Ausnahme ausgelöst wird, bevor der Code tatsächlich aufgerufen wird). Dies ist jedoch nur eine Vermutung.
Weiß jemand, wie ich das tun könnte?
Als Randbemerkung, können Sie nur fangen wollen erwartete Ausnahme - eine catch-all-except-Klausel kann andere Probleme verbergen, insbesondere wenn sie die Ausnahme nur zum Schweigen bringt und ignoriert. –