Programm beenden

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.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Programm beenden

Beitragvon Anfänger1911 » Donnerstag 17. November 2005, 16:44

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!
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 17. November 2005, 16:48

sys.exit() ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Donnerstag 17. November 2005, 17:14

Oder auch

Code: Alles auswählen

 raise SystemExit,"Ihr seid doof! Mit euch spiele ich nicht mehr!"
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 17. November 2005, 18:05

:shock: :lol: :D

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Funktioniert nicht!

Beitragvon Gast » Donnerstag 17. November 2005, 19:23

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.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Funktioniert nicht!

Beitragvon Anfänger1911 » Donnerstag 17. November 2005, 19:26

Sorry!

Der letzte Beitrag war von mir!
Hab mich ausgeloggt und vergessen mich wieder einzuloggen!
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Donnerstag 17. November 2005, 19:48

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!
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Eingerückt!

Beitragvon Anfänger1911 » Donnerstag 17. November 2005, 20:03

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.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Geändert

Beitragvon Anfänger1911 » Donnerstag 17. November 2005, 20:08

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.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Donnerstag 17. November 2005, 20:09

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

Code: Alles auswählen

l.login()
aufrufen.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Login Funktion

Beitragvon Anfänger1911 » Donnerstag 17. November 2005, 20:17

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Login Funktion

Beitragvon Leonidas » Donnerstag 17. November 2005, 20:46

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Donnerstag 17. November 2005, 22:36

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.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Traceback

Beitragvon Anfänger1911 » Freitag 18. November 2005, 14:44

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 18. November 2005, 14:47

Also bei mir klappt das wunderbar... Beim "falschen login" kommt kein Traceback...

Wie startest du das Programm denn?

Versuch doch mal sys.exit(0)...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder