(gelöst)Optparse richtig anwenden?

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
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. August 2008, 14:39

Hallo liebe Community,
ich komme gerade nicht weiter mit dem Modul Optparse.
Ich habe mir da mal ein Beispielskript herruntergeladen um es zu testen,
doch ich bekomme immer den Fehler aus der else Anweisung, wenn
ich es starte("Es werden exakt zwei Argumente erwartet").
So sieht das Skript jetzt aus:

Code: Alles auswählen

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-o", "--operation", dest="operation")
(optionen, args) = parser.parse_args()
if len(args) != 2:
    parser.error("Es werden exakt zwei Argumente erwartet")
calc = {
       "plus" : lambda a, b: a + b,
       "minus" : lambda a, b: a - b,
       "mal" : lambda a, b: a * b,
       "geteilt" : lambda a, b: a / b,
       None : lambda a, b: a + b
       }
op = optionen.operation
if op in calc:
    print "Ergebnis:", calc[op](float(args[0]), float(args[1]))
else:
    parser.error("%s ist keine Operation" % op)
Was muss ich noch hinzufügen oder verbessern, das ich nicht immer
die Fehlermeldung bekomme, sondern mit der Eingabe der Kommandozeilenschaltern beginnen kann?
So soll es später aufgerufen werden:
calc.py -o plus 7 5
calc.py -o minus 13 29
calc.py -o mal 4 11
calc.py -o geteilt 3 2
Zuletzt geändert von Schaf220 am Dienstag 19. August 2008, 17:53, insgesamt 1-mal geändert.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 19. August 2008, 14:54

Schaf220 hat geschrieben: So soll es später aufgerufen werden:
calc.py -o plus 7 5
calc.py -o minus 13 29
calc.py -o mal 4 11
calc.py -o geteilt 3 2
Was heisst spaeter? Du musst es schon jetzt so aufrufen. Bei mir klappt das.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. August 2008, 14:58

Wenn ich das Skript so starte wie es jetzt ist, dann bekomme ich
sofort die Fehlermeldung! Das Programm beendet sich dann sofort.
Benutzeravatar
snafu
User
Beiträge: 5646
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 19. August 2008, 14:58

Klappt bei mir einwandfrei:

Code: Alles auswählen

sebastian@hardy ~> python calc.py -o plus 7 5
Ergebnis: 12.0
sebastian@hardy ~> python calc.py -o minus 13 29
Ergebnis: -16.0
sebastian@hardy ~> python calc.py -o mal 4 11
Ergebnis: 44.0
sebastian@hardy ~> python calc.py -o geteilt 3 2
Ergebnis: 1.5
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. August 2008, 15:02

Habt ihr den Code genau so wie er daist oder noch was dazu gefügt?
Bei mir kommt nämlich sofort die Fehlermeldung ich komme erst gar nicht zum eingeben =(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 19. August 2008, 15:04

Schaf220 hat geschrieben: Bei mir kommt nämlich sofort die Fehlermeldung ich komme erst gar nicht zum eingeben =(
Ach die meinst Du ... na dann ist ja alles klar ;-)

SCNR
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 19. August 2008, 15:27

Schaf220 hat geschrieben:Habt ihr den Code genau so wie er daist oder noch was dazu gefügt?
Bei mir kommt nämlich sofort die Fehlermeldung ich komme erst gar nicht zum eingeben =(
:?: Du darfst erst Enter druecken, nachdem die komplette Zeile mit den ganzen Parametern eingegeben wurde... Nicht das Programm ausfuehren und dann die Parameter eingeben wollen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 19. August 2008, 15:51

Hyperion hat geschrieben:
Schaf220 hat geschrieben: Bei mir kommt nämlich sofort die Fehlermeldung ich komme erst gar nicht zum eingeben =(
Ach die meinst Du ... na dann ist ja alles klar ;-)

SCNR
Der Punkt ist, wenn du nicht beschreibst was passiert, kann man dir hier nicht helfen ... Kristallkugeln gehn so leicht kaputt :/ Und teuer sind die auch :O
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. August 2008, 15:54

hmm ok soweit so gut das hab ich verstanden is mir grad klar geworden,
das alles gemeinsam auf zu rufen ist ja auch nur logisch =)
Jetzt tut sich folgendes Problem auf die Konsole meckert jetzt rumm das der Befehl python nicht erkannt wird obwohl ich das Verzeichnis "C:\Python25"
in die Umgebungsvariablen zu Path hinzu gefügt habe.
Was muss ich noch einstellen unter Vista 64 Bit?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 19. August 2008, 16:01

Liegt denn die python.exe da auch drin?
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. August 2008, 16:01

So vielen vielen Dank an alle!
Jetzt geht alles in Path war vor dem "C:\Python 25" ein "%",
das habe ich eben entfernt und jetzt geht es wieder.=)
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 19. August 2008, 18:10

Code: Alles auswählen

import operator as op

calc = {
       "plus" : op.add
       "minus" : lambda a, b : a -b 
       "mal" : op.mul
       "geteilt" : op.div
       None : op.add
       }
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 19. August 2008, 18:44

audax, magst du ``operator.sub`` nicht?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 19. August 2008, 18:49

Habs übersehen, hab gerade ne Soße am kochen :D
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Samstag 23. August 2008, 11:09

Made my day! :D
Antworten