J'essaye actuellement d'extraire des informations de résultat de modèle de H2O en Python.Python: passe la fonction en tant qu'argument, évalue avec try/except et renvoie le résultat
Pour le contexte, j'ai quelque chose le long des lignes suivantes:
model = H2ODeepLearningEstimator(...)
model.train()
Une fois le modèle est formé, je peux appeler les différents paramètres du modèle. Cependant, certaines mesures ne seront générées qu'en fonction du type de modèle. Par exemple, je pourrais appeler le model.mse(valid=True)
et il retournera une valeur. Par exemple, je peux appeler le model.mse(valid=True)
. mais si j'appelle model.aic(valid=True)
il lancera et exception si AIC n'a pas été généré. C'est un problème car j'ai besoin de générer une fonction qui écrit toutes les métriques générées dans une table HIVE. Si la métrique n'a pas été générée et que l'appel lance une exception, nous écrirons simplement NULL à hive.
Alors, je l'ai essayé de faire ce qui suit:
param=None
try:
param=tryParam(model.aic())
except:
pass
print(param)
Cela correctement pour revenir None
la valeur AIC
Cependant, je dois le faire pour chaque paramètre, donc préférerais envelopper une fonction générique autour d'elle. Par exemple, je voudrais passer la fonction model.aic()
en tant que paramètre à une fonction appelée tryParam
, qui l'évalue ensuite et attrape toutes les expections qui se produisent. Tels que:
def tryParam(getParam):
try:
return getParam
except:
return None
tryParam(model.aic())
tryParam(model.mse())
tryParam(model.mae())
etc.
Cependant, cela ne fonctionne pas. Lorsque j'appelle tryParam(model.aic())
l'exception est déclenchée et le programme s'arrête. Il me semble que le paramètre est en cours d'évaluation avant d'être passé à tryParam
(d'où le déclenchement de l'exception avant que le code pour le gérer ne soit appelé). Ce n'est qu'une supposition cependant.
Est-ce que quelqu'un sait comment je pourrais faire cela?
Comme une note de côté, vous voudrez peut-être seul hic exception attendue - une clause catch-all except peut cacher d'autres problèmes, spécialement quand elle ne fait que silencer et ignore l'exception. –