Seite 1 von 1

Übergabeparameter - Fehler abfangen

Verfasst: Mittwoch 7. Juni 2006, 10:39
von stigi
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 :)

Verfasst: Mittwoch 7. Juni 2006, 10:52
von tromai
Schön, dass du fragst :)
Ich war gerade am Suchen wie ich das mache *g*

Re: Übergabeparameter - Fehler abfangen

Verfasst: Mittwoch 7. Juni 2006, 11:03
von gerold
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
:-)

Verfasst: Mittwoch 7. Juni 2006, 12:05
von stigi
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 ?

Verfasst: Mittwoch 7. Juni 2006, 12:09
von murph

Code: Alles auswählen

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

Verfasst: Mittwoch 7. Juni 2006, 12:20
von beewee
@murph: Ich würde Raise kleinschreiben, dann dürftes besser funktionieren ;-)

BeeWee

Verfasst: Mittwoch 7. Juni 2006, 12:23
von murph
hast recht...war schon so in camel-stil^^

Verfasst: Mittwoch 7. Juni 2006, 12:25
von stigi
thx mit <2 gehts leider nicht, muss <3 warum auch immer :shock:

Verfasst: Mittwoch 7. Juni 2006, 12:31
von murph
ist doch klar!
wenn es kleiner als 2 ist, ist es ja 1,9999999... oder kleiner!
du kannst auch <= nehmen

Verfasst: Mittwoch 7. Juni 2006, 12:36
von stigi
*mir selbst wegen mir annen kopf fass*

alles klar :roll:

Verfasst: Mittwoch 7. Juni 2006, 12:38
von beewee
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

Verfasst: Mittwoch 7. Juni 2006, 12:40
von stigi
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

Verfasst: Mittwoch 7. Juni 2006, 12:53
von beewee
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

Verfasst: Mittwoch 7. Juni 2006, 13:09
von icepacker
imo alles nicht richtig :wink:
dürfte einfach daran liegen, dass das erste argument den programmnamen bzw. pfad enthält.

Verfasst: Mittwoch 7. Juni 2006, 13:37
von stigi
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:

Verfasst: Mittwoch 7. Juni 2006, 13:44
von stigi
ai da wird doch der hund in der pfanne verrückt.
Kann mir jemand eine garantiert richtige antwort geben bitte :roll:

es sollen genau 2 übergabeparameter sein. nicht mehr und nicht weniger.

Code: Alles auswählen

if len(sys.argv)<=2 and len(sys.argv) >= ?:
    raise SystemExit

Verfasst: Mittwoch 7. Juni 2006, 13:57
von Rebecca

Code: Alles auswählen

if len(sys.argv) != 3
(sys.argv[0] = Scriptname, sys.argv[1] = erster Parameter, sys.argv[2] = zweiter Paramter :arrow: Laenge drei ist gewuenscht.)