Seite 1 von 1

Prüfen, ob Funktion existiert

Verfasst: Mittwoch 17. September 2008, 20:24
von theliquidwave
Hallo.
Ist es irgendwie möglich zu prüfen, ob eine Funktion existiert?
Mit ``isinstance()`` und ``callable()`` funktioniert das nicht, da werden Errors geschmissen sobald ich die Prüfung durchführe und die Funktion nicht existiert.

Danke für Hilfe im Vorraus :)

~ Chris

Verfasst: Mittwoch 17. September 2008, 20:48
von numerix
Vielleicht hilft das, wobei es nicht speziell auf Funktionen bezogen ist, sondern sich auf beliebige Objekte bezieht. Ggf. könnte man dann weiter prüfen, welche Art von Objekt es ist.

Code: Alles auswählen

>>> try:
...     dummy = int
... except:
...     print "Gibt's nicht"
...
>>> try:
...     dummy = inti
... except:
...     print "Gibt's nicht"
...
Gibt's nicht
Oder du prüfst auf Vorhandensein in dir().

Verfasst: Mittwoch 17. September 2008, 21:15
von theliquidwave
Hi.
Die Idee ist sehr gut, werde das mal in Betracht ziehen :)

Danke!

~ Chris

Verfasst: Mittwoch 17. September 2008, 21:17
von Trundle
Wobei es eigentlich reichen müsste, eine ``NameError``-Ausnahme abzufangen.

Verfasst: Mittwoch 17. September 2008, 21:27
von yipyip

Code: Alles auswählen

def huhu():
  x = 1
  print locals()
  print 'x' in locals()

huhu()
print globals()
print 'huhu' in globals()
print 'huhu1' in globals()
siehe auch:
http://www.faqs.org/docs/diveintopython ... ocals.html


:wink:
yipyip

Verfasst: Mittwoch 17. September 2008, 21:29
von numerix
Trundle hat geschrieben:Wobei es eigentlich reichen müsste, eine ``NameError``-Ausnahme abzufangen.
Ja, da hast du Recht und das sollte man auch so machen.
Allgemeines "except" am besten gar nicht erst angewöhnen.

Verfasst: Mittwoch 17. September 2008, 21:33
von Leonidas
yipyip, so einfach ist das nicht, denn es gibt ja nicht nur globals und locals sondern auch noch Modulnamespaces und Klassen, die man alle behandeln muss. Manchmal ist das sinnvoll, oft ist es aber nützlicher die NameErrors und AttributeErrors abzufangen.

Verfasst: Mittwoch 17. September 2008, 21:40
von yipyip
OK, wieder was dazugelernt.

Verfasst: Mittwoch 17. September 2008, 21:45
von DasIch
foo in dir() ?

Verfasst: Mittwoch 17. September 2008, 23:09
von theliquidwave
Ok,
danke an alle, funktioniert perfekt!

~ Chris

Verfasst: Donnerstag 18. September 2008, 07:44
von jens