Die Situation sei folgende:
Code: Alles auswählen
class Base:
def callback(self, **args):
""" abstract """
pass
def do(self, request):
try:
self.callback(**request)
except TypeError, t:
print "fehlerhafte parameter übergeben"
class Startseite(Base):
def callback(self, name, begehr, lieblingsfarbe):
print name, begehr, lieblingsfarbe
class Problem(Base):
def callback(self, **argmap):
raise TypeError()
Dank der Funktionalität von Base müssten sich die Funktionen nicht jedesmal mit der Vollständigkeit der Argumente auseinandersetzen.
So weit so gut. Was passiert nun aber, wenn irgendwo unterhalb der funktion ein TypeError verursacht wird? dann wird der fälschlicherweise gefangen, und das ist imho schlimmer als ihn nicht zu fangen, da er falsch interpretiert wird.
eine alternative wäre hier LBYL, was aber unpythonic wäre.
ich bin schon häufiger auf das problem gestossen, auch in anderen formen. gibt es da einen hübschen weg, der sich mir zZ entzieht?