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

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 :)
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

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

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

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 ?
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Code: Alles auswählen

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

@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:

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

thx mit <2 gehts leider nicht, muss <3 warum auch immer :shock:
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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

*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.
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

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

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
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

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

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

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:
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

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
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.)
Antworten