Seite 1 von 1

Parameter von einer zur nächsten Funktion weiterreichen...

Verfasst: Dienstag 28. Juni 2011, 07:59
von mutetella
Hallo,

bei folgendem Verhalten fehlt mir der Durchblick:

Code: Alles auswählen

In [31]: def date_factory(years, months, days):
    years = years or xrange(1,10000)
    months = months or xrange(1,13)
    days = days or xrange(1,32)
    for y, m, d in ((y, m, d) for y in years for m in months for d in days):
        if d < 1:
            yield datetime.date(y, m, max_month_day(y, m))
        else:
            try:
                yield datetime.date(y, m, d)
            except ValueError:
                pass
   ....:             
   ....:             

In [43]: def event(callback, *args, **kwargs):
    callback(*args, **kwargs)
   ....:     
   ....:     

In [45]: kw = {'years': [2010, 2011], 'months': [3], 'days': [15]}

In [46]: list(date_factory(**kw))
Out[46]: [datetime.date(2010, 3, 15), datetime.date(2011, 3, 15)]

In [47]: list(event(date_factory, **kw))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

TypeError: 'NoneType' object is not iterable
Wie kommt das, dass ein direkter Aufruf von 'date_factory' funktioniert, ein Aufruf über 'event' im Nichts landet...?

Wenn ich selbiges mit einer einfachen Funktion, die keinen Generator liefert, mache, gibt es keine Probleme:

Code: Alles auswählen

In [48]: def foo(years, months, days):
   ....:     print years, months, days
   ....:     
   ....:     

In [49]: foo(**kw)
[2010, 2011] [3] [15]

In [50]: event(foo, **kw)
[2010, 2011] [3] [15]
Das Leben könnte so einfach sein... :(

mutetella

Re: Parameter von einer zur nächsten Funktion weiterreichen.

Verfasst: Dienstag 28. Juni 2011, 08:14
von Xynon1
Wieder ein fehlendes "return". :)

Re: Parameter von einer zur nächsten Funktion weiterreichen.

Verfasst: Dienstag 28. Juni 2011, 08:17
von mutetella
Wie oft muss ein Mensch denselben Fehler wiederholen, bis er endlich neue machen darf?

Ist das jetzt zum Lachen oder zum Weinen?

*grtlgrmpf*

Re: Parameter von einer zur nächsten Funktion weiterreichen.

Verfasst: Dienstag 28. Juni 2011, 08:29
von Xynon1
Zum lächeln. Mach dir das Leben nicht so schwer, das kann vorkommen. Bei solchen Fehlern ist es oft das Beste erstmal eine kleine Pause bzw. etwas anderes zumachen und danach nochmal mit einem klarerem Hirn darauf zuschauen. :wink: