Seite 1 von 2
Programm beenden
Verfasst: Donnerstag 17. November 2005, 16:44
von Anfänger1911
Hi!
Ich habe in mein Programm ein paar if und else Befehle hineingeschrieben.
Nun würde ich gerne als else Befehl programmieren, dass das Programm
direkt zum Ende springt und nicht erst die dazwischen folgenden Teile
abspielt. Wie lautet der Befehl?
Danke schonmal!
Verfasst: Donnerstag 17. November 2005, 16:48
von jens
sys.exit()

Verfasst: Donnerstag 17. November 2005, 17:14
von Joghurt
Oder auch
Code: Alles auswählen
raise SystemExit,"Ihr seid doof! Mit euch spiele ich nicht mehr!"
Verfasst: Donnerstag 17. November 2005, 18:05
von jens
Funktioniert nicht!
Verfasst: Donnerstag 17. November 2005, 19:23
von Gast
Egal welchen der beiden Befehle ich eingebe es funktioniert nicht!
Das Programm zeigt mir folgende Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 46, in -toplevel-
l = Anmelden()
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 44, in __init__
raise SystemExit
SystemExit
Woran liegt das?
Hier ist ein Auschnitt meines Programms:
Code: Alles auswählen
# Anmelden
class Anmelden:
def login():
print "Geben sie ihren Benutzernamen ein!"
print
userscan="Testnutzer"
user=raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan="Test"
print
passwort=raw_input()
print
if passwort == passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
print "Sie sind nicht berechtigt dieses Programm zu benutzen!"
raise SystemExit,"Das Programm wird jetzt beendet!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
raise SystemExit,"Das Programm wird jetzt beendet!"
l = Anmelden()
Edit (Leonidas): Code in Python-Tags gesetzt.
Funktioniert nicht!
Verfasst: Donnerstag 17. November 2005, 19:26
von Anfänger1911
Sorry!
Der letzte Beitrag war von mir!
Hab mich ausgeloggt und vergessen mich wieder einzuloggen!
Verfasst: Donnerstag 17. November 2005, 19:48
von Joghurt
Poste das Ding nochmal mit Python-Tags. Ohne Einrückungen ist das nicht zu analysieren.
BTW: Für deinen Fall wäre ein sys.Exit(1) oder so doch besser geeignet. SystemExit gibt nämlich immer 0 an die Shell zurück, IIRC. Aber der Fehler liegt woanders.
Edit2: Welche Pythonversion ist das denn? Es scheint so, als ob der raise SystemExit genau das mach, was er soll, nämlich die SystemExit Exception auszulösen. Nur diese führt nicht zum sofortigen Abbruch sondern zu einem Traceback.
Ersetze es mal durch sys.exit(1) (das import sys nicht vergessen)
Ach übrigens: es muss def login(self): heißen!
Eingerückt!
Verfasst: Donnerstag 17. November 2005, 20:03
von Anfänger1911
Hier ist ein Auschnitt meines Programms:
Python-Code:
Code: Alles auswählen
# Anmelden
class Anmelden:
def login():
print "Geben sie ihren Benutzernamen ein!"
print
userscan="Testnutzer"
user=raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan="Test"
print
passwort=raw_input()
print
if passwort== passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
import sys
sys.Exit(1)
l = Anmelden()
Nach dieser Änderung überspringt er diesen Teil ganz!
Meine Pythonversion ist 2.4.2!
Edit (Leonidas): Code in Python-Tags gesetzt.
Geändert
Verfasst: Donnerstag 17. November 2005, 20:08
von Anfänger1911
Hab das Programm nochmal ein bisschen geändert:
Code: Alles auswählen
# Anmelden
class Anmelden:
def __init__(self):
print "Geben sie ihren Benutzernamen ein!"
print
userscan="Testnutzer"
user=raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan="Test"
print
passwort=raw_input()
print
if passwort== passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
import sys
sys.Exit(1)
l = Anmelden()
Jetzt wird folgende Fehlermeldung angezeigt:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 47, in -toplevel-
l = Anmelden()
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 45, in __init__
sys.Exit(1)
AttributeError: 'module' object has no attribute 'Exit'
Edit (Leonidas): Code in Python-Tags gesetzt.
Verfasst: Donnerstag 17. November 2005, 20:09
von Joghurt
Dann musst du irgendwie den raise-Befehl falsch geschrieben haben...
Und dieser Teil wird übersprungen, weil du die Loginmethode ja gar nicht aufrufst.
Zuerst musst du aber entweder schreiben: "def login(self)" oder login in eine classmethod umwandeln, mach einfach ersteres
und denn mit
aufrufen.
Login Funktion
Verfasst: Donnerstag 17. November 2005, 20:17
von Anfänger1911
Ich hab die Login Funktion einfach rausgenommen! Jetzt sieht mein Programm so aus:
Code: Alles auswählen
# Anmeldung
print "Geben sie ihren Benutzernamen ein!"
print
userscan="Testnutzer"
user=raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan="Test"
print
passwort=raw_input()
print
if passwort== passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
import sys
sys.Exit(1)
Aber jetzt wird dieser Fehler angezeigt:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 43, in -toplevel-
sys.Exit(1)
AttributeError: 'module' object has no attribute 'Exit'
Edit (Leonidas): Code in Python-Tags gesetzt.
Re: Login Funktion
Verfasst: Donnerstag 17. November 2005, 20:46
von Leonidas
Anfänger1911 hat geschrieben:Aber jetzt wird dieser Fehler angezeigt: [...]
Was spricht denn dagegen, die Funktion exit() richtig, das heißt klein zu schreiben?
Hier eine etwas korrigierte Version deines Programms:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: latin-1 -*-
import sys
# Anmeldung
print "Geben sie ihren Benutzernamen ein!"
print
userscan = "Testnutzer"
user = raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan = "Test"
print
passwort = raw_input()
print
if passwort== passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
sys.exit(1)
Änderungen: sys.exit() richtig geschrieben, Shebang eingefüht, Encoding gesetzt, dem Python Styleguide angepasst.
Verfasst: Donnerstag 17. November 2005, 22:36
von BlackJack
Noch eine technische Amerkung zu Logins: Üblicherweise liefert man bei einem Fehlschlag nicht die Information ob es an einem nicht existierenden Benutzernamen oder am Passwort lag. So macht man es Angreifern leichter die erstmal verschiedene Benutzernamen ausprobieren. Wenn sie einen Benutzer gefunden haben, dann wissen sie das sie für den jetzt Passworte ausprobieren können.
Traceback
Verfasst: Freitag 18. November 2005, 14:44
von Anfänger1911
Ich habe die Änderungen durchgführt trotzdem erscheint noch folgender Fehler:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 46, in -toplevel-
sys.exit(1)
SystemExit: 1
Mein Programm sieht mittlerweile so aus:
Code: Alles auswählen
# -*- coding: latin-1 -*-
import sys
# Anmelden
print "Geben sie ihren Benutzernamen ein!"
print
userscan = "Testnutzer"
user = raw_input()
print
if user == userscan:
print "Geben sie nun ihr Passwort ein!"
passwortscan = "Test"
print
passwort = raw_input()
print
if passwort == passwortscan:
print "Herzlich Wilkommen!"
else:
print "Passwort falsch!"
else:
print "Unbekannter Benutzer! Sie sind nicht berechtigt dieses"
print "Programm zu benutzen!"
sys.exit(1)
Edit (Leonidas): Code in Python-Tags gesetzt.
Verfasst: Freitag 18. November 2005, 14:47
von jens
Also bei mir klappt das wunderbar... Beim "falschen login" kommt kein Traceback...
Wie startest du das Programm denn?
Versuch doch mal sys.exit(0)...
Gleicher Fehler
Verfasst: Freitag 18. November 2005, 14:59
von Anfänger1911
Bei sys.exit(0) tritt der gleiche Fehler auf!
Ich starte das Programm über Python IDLE, Run->Run Module!
Verfasst: Freitag 18. November 2005, 15:03
von jens
Ja ja, die dolle IDLE Daran wird es wohl liegen

Es ist wohl kein richtiger Fehler, sondern wohl ehr ein Hinweis... Aber ich hab keine Erfahrung mit der IDLE...
Schau mal in die FAQ:
Welche Editoren werden für Python empfohlen?
EDIT: Ach das hatten wir doch
letztens erst 
Re: Traceback
Verfasst: Freitag 18. November 2005, 15:54
von Joghurt
Anfänger1911 hat geschrieben:Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Mein Benutzername\Eigene Dateien\Python Programme\Programmname", line 46, in -toplevel-
sys.exit(1)
SystemExit: 1
Dann hatte das raise SystemExit auch funktioniert.
Dein Programm kann ja schlecht auch gleich mit IDLE beenden (welches ja schließlich auch unter demselben Python-Interpreter läuft). Starte das Programm doch einfach direkt.
Verfasst: Freitag 18. November 2005, 15:56
von jens
Hat er doch geschrieben

Verfasst: Freitag 18. November 2005, 15:59
von Joghurt
jens hat geschrieben:Hat er doch geschrieben

Habs ja auch schon gesehen und die Antwort entsprechend angepasst.
(Für die anderen: ich hatte zuerst gefragt, worunter er die Programme startet)