Übergabeparameter - Fehler abfangen

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.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Übergabeparameter - Fehler abfangen

Beitragvon stigi » Mittwoch 7. Juni 2006, 10:39

mahlzeit

ich hab in meinem pyscript 2 übergabeparameter

Code: Alles auswählen

....
#--------------- Uebergabeparameter setzen -------------
param1 = int(sys.argv[2])
param2 = int(sys.argv[1])
....


wo und wie müsste ich denn ein fehlerhaftes aufrufen des scriptes abfangen?
also wenn der anwender nicht "script 5 10" schreibt sondern nur "script" - biser bekomme ich eine exception ausgabe - is ja klar - ich möchte aber, dass das script ohne der korrekten anzahl von parametern gar nicht erst losläuft.
ist sicherlich trivial, wäre über hilfe trotzdem sehr dankbar :)
toll wäre auch wenn mir jemand einen denkanstoß geben könnte wie ich eine "anleitung" ausgebe wenn der user "script -help" schreibt :)
Bild read between the lines for better smelling socks Bild
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 7. Juni 2006, 10:52

Schön, dass du fragst :)
Ich war gerade am Suchen wie ich das mache *g*
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Übergabeparameter - Fehler abfangen

Beitragvon gerold » Mittwoch 7. Juni 2006, 11:03

Hi stigi!

sys.argv ist eine Liste. Die länge der Liste erfährst du mit len(sys.argv). Damit weißt du schon mal, wieviele Parameter übergeben wurden.

Benannte Parameter (-h --help, -d --debug, ...) machst du am besten mit dem Modul **optparse**.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Mittwoch 7. Juni 2006, 12:05

ok ja die anzahl der parameter hab ich zwar aber wenn ich keine parameter mitgeb oder zu wenige dann bekomm ich halt immernoch die exception.
wie sag ich denn dem script, dass es gar nicht erst startet wenn anzahl < 2 ist ?
Bild read between the lines for better smelling socks Bild
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Mittwoch 7. Juni 2006, 12:09

Code: Alles auswählen

if len(sys.argv)<2:
    Raise SystemExit
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Beitragvon beewee » Mittwoch 7. Juni 2006, 12:20

@murph: Ich würde Raise kleinschreiben, dann dürftes besser funktionieren ;-)

BeeWee
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Mittwoch 7. Juni 2006, 12:23

hast recht...war schon so in camel-stil^^
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Mittwoch 7. Juni 2006, 12:25

thx mit <2 gehts leider nicht, muss <3 warum auch immer :shock:
Bild read between the lines for better smelling socks Bild
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Mittwoch 7. Juni 2006, 12:31

ist doch klar!
wenn es kleiner als 2 ist, ist es ja 1,9999999... oder kleiner!
du kannst auch <= nehmen
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Mittwoch 7. Juni 2006, 12:36

*mir selbst wegen mir annen kopf fass*

alles klar :roll:
Zuletzt geändert von stigi am Mittwoch 7. Juni 2006, 12:39, insgesamt 1-mal geändert.
Bild read between the lines for better smelling socks Bild
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Beitragvon beewee » Mittwoch 7. Juni 2006, 12:38

Hm, imho müsste

Code: Alles auswählen

if len(sys.argv)<2:
    raise SystemExit

schon richtig sein. Wenn weniger als 2 Argumente mitgeegebn werden raised er einen Fehler, sonst läuft er normal weiter

BeeWee
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Mittwoch 7. Juni 2006, 12:40

denkfehler meinerseits - alles in Ordnung danke :lol:

aber es muss trotzdem <=2 heissen sonst gehts nicht

Traceback (most recent call last):
File "Y:\Mitarbeiter\xxx\pythonwin\correct.py", line 17, in ?
param1 = int(sys.argv[2])
IndexError: list index out of range
Bild read between the lines for better smelling socks Bild
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Beitragvon beewee » Mittwoch 7. Juni 2006, 12:53

Achso, denkfehler meinerseits :D
Das liegt daran, dass Indexes ja 0-basiert sind, also abc[0] das erste Element ist und deswegen abc[2] da s dritte und nicht das zweite Elemnt ist :D

BeeWee
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Beitragvon icepacker » Mittwoch 7. Juni 2006, 13:09

imo alles nicht richtig :wink:
dürfte einfach daran liegen, dass das erste argument den programmnamen bzw. pfad enthält.
ubuntu linux !!
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Mittwoch 7. Juni 2006, 13:37

icepacker hat geschrieben:imo alles nicht richtig :wink:
dürfte einfach daran liegen, dass das erste argument den programmnamen bzw. pfad enthält.


bingo :roll:
Bild read between the lines for better smelling socks Bild

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder