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

Prüfen, ob Funktion existiert

Beitragvon theliquidwave » 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

Beitragvon numerix » 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

Beitragvon theliquidwave » 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

Beitragvon Trundle » 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

Beitragvon yipyip » 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

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

Beitragvon Leonidas » 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

Beitragvon yipyip » Mittwoch 17. September 2008, 21:40

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

Beitragvon DasIch » Mittwoch 17. September 2008, 21:45

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

Beitragvon theliquidwave » Mittwoch 17. September 2008, 23:09

Ok,
danke an alle, funktioniert perfekt!

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

Beitragvon jens » Donnerstag 18. September 2008, 07:44


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

Wer ist online?

Mitglieder in diesem Forum: Google [Bot], Yahoo [Bot]