Prüfen, ob Funktion existiert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 17. September 2008, 20:24

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
Grüßle.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 17. September 2008, 20:48

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().
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 17. September 2008, 21:15

Hi.
Die Idee ist sehr gut, werde das mal in Betracht ziehen :)

Danke!

~ Chris
Grüßle.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Mittwoch 17. September 2008, 21:17

Wobei es eigentlich reichen müsste, eine ``NameError``-Ausnahme abzufangen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mittwoch 17. September 2008, 21:27

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 17. September 2008, 21:29

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 17. September 2008, 21:33

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mittwoch 17. September 2008, 21:40

OK, wieder was dazugelernt.
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 17. September 2008, 21:45

foo in dir() ?
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 17. September 2008, 23:09

Ok,
danke an alle, funktioniert perfekt!

~ Chris
Grüßle.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 18. September 2008, 07:44


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten