He creado un conjunto de funciones y necesito cláusulas excepcionales muy similares en todas ellas, pero odio tener tantas líneas de cláusulas try y except y el mismo código dentro de cada función. Por ejemplo:Repetitive Try y Except Clauses
import sys
import random
def foo():
num=random.random()
try:
if num>0.5: print 'OK'
elif num>0.25: raise NameError('Too Small')
else: raise KeyboardInterrupt
except NameError:
print "%s had a NameError" % sys._getframe().f_code.co_name
except:
print "%s had a different Error" % sys._getframe().f_code.co_name
def bar():
num=random.random()
try:
if num>0.8: print 'OK'
elif num>0.6: raise NameError('Too Small')
else: raise KeyboardInterrupt
except NameError:
print "%s had a NameError" % sys._getframe().f_code.co_name
except:
print "%s had a different Error" % sys._getframe().f_code.co_name
El código después de "probar" es diferente para las funciones, pero el código después de "excepción" es la misma. Quiero consolidar esas declaraciones excepto para que mi código no se vea tan estrecho. ¿Existe una forma correcta de hacer esto?
Capturar cualquier excepción suele ser una muy mala idea. Enmascara problemas reales y dificulta la depuración. Captura las excepciones que conozcas, si no las conoces, ¿realmente quieres atraparlas? –
Ese es un buen punto. Si la función falla, necesito la secuencia de comandos para seguir adelante. El último "excepto" incluye 'print sys.exc_info() [: 2]' que incluye el nombre de la excepción. ¿Hay una mejor manera de hacer esto? – crunkchitis