Seite 1 von 2

if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:21
von bluelagoon
Guten Morgen ihr Lieben,
so also ich hab gelesen bei galileo-openbook das man if-anweisungen mehrmals verschachteln kann. Das hab ich prompt versucht und hier ist mein Code

Code: Alles auswählen

#!usr/bin/env python
import linecache
import sys, dbus
import os
import time

#L ist eine Variable in der, der Wert steht.
auswahl = 2

if auswahl == 4 :
  outfile=open("Datei.ini","w+")
  for line in open("Daten.ini"):
      line=line.replace ("X","5")
      outfile.write(line)
      print line
  outfile.close()

elif auswahl == 2 :
#  Die Dateien und Verzeichnisse, die gesichert werden sollen,
    quellen = ['/home/davidlinux/',]
    ziel_verzeichnis = '/etc/dp/'
    heute = ziel_verzeichnis + time.strftime('%Y%m%d')
    jetzt = time.strftime('%H%M%S')
    print 'Sicherung wird gestartet und unter /etc/dp/ gespeichert'
    print 'Druecken Sie 2Mal STRG + C um die Sicherung abzubrechen'

#Erzeuge Ordner wenn dieser noch nicht Existiert mit heutigem Datum:
    if not os.path.exists(heute):
        os.mkdir(heute) # erzeuge das Verzeichnis
        print 'Verzeichnis', heute, 'erfolgreich angelegt'
# Der Name der Tar-Datei:
    ziel = heute + os.sep + jetzt + '.tar'
    tar_befehl = 'tar -czf %s %s' % (ziel, ' '.join(quellen))
    os.system(tar_befehl)
    #tar_befehl=sys.stdin.readline()
# Sicherung starten
try:
    while True:
        exitstatus=os.system(tar_befehl)
        if exitstatus == 0:
            print 'Erfolgreiche Sicherung nach "%s"' % ziel
        else:
            print 'Sicherung fehlgeschlagen! (Statuscode: %d)' % exitstatus
            ans=raw_input("Aktion wird abgebrochen! (Bitte Druecken Sie Enter!): ").lower
            print 'Sicherung abgebrochen'
        break
    else:
        print 'FEHLER!'
except KeyboardInterrupt:
    print "Sicherung beendet"

elif auswahl == 3:
  def shutdown():
    bus = dbus.SystemBus()
    try:
        remote_object = bus.get_object('org.freedesktop.Hal',
                                    '/org/freedesktop/Hal/devices/computer')
        props = remote_object.Shutdown(dbus_interface='org.freedesktop.Hal.Device.SystemPowerManagement')
    except dbus.exceptions.DBusException, e:
        print e

if __name__ == "__main__":
    shutdown()

so nun bin ich so weit das er die ersten beiden Bedingungen ausführt
wenn ich die dritte ausklammere.. Aber wenn ich sie eben so stehn lasse kommt immer wieder....

File "dp_client.py", line 55
elif auswahl == 3:
^
SyntaxError: invalid syntax


dabei versteh ich nicht warum er diesen Fehler anzeigt denn ich hab das schon 2 mal verändert aber immer dasselbe vll sieht jemand ja meinen Fehler mehrere Augen sehen ja auch besser. :)
vielen Dank

euer Bluelagoon

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:26
von lutz.horn
Deine Einrückungen scheinen nicht nicht zu stimmen, die Code-Blöcke sind so nicht sinnvoll. Konkret gibt es für das 'elif'-Statement in Zeile 33 kein zugehöriges 'if'-Statement.

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:27
von Defnull
Der try-except block is ja auch falsch eingerückt.

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:44
von bluelagoon
naja aber sonst wird ja nich gemeckert das was falsch eingerückt wäre :(

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:48
von bluelagoon
ich mein wenn ich try einrücke kommt

File "dp_client.py", line 39
try:
^
IndentationError: unindent does not match any outer indentation level

irgendwie glaub ich eher das er ab der zweiten anweisung von if nichts mehr erkennt...

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:54
von Hyperion
bluelagoon hat geschrieben:Guten Morgen ihr Lieben,
so also ich hab gelesen bei galileo-openbook das man if-anweisungen mehrmals verschachteln kann. Das hab
Man sollte dieses aus div. Gründen nicht nutzen ;-)

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:57
von bluelagoon
warum denn nicht hyperion?
Weisst du vll wo mein Fehler liegen könnte :(

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 08:58
von Rebecca
bluelagoon, du kannst den Python-Kennern schon trauen. :wink:

Dann hast du das try in deinem zweiten Versuch eben nicht richtig eingerueckt. So wie es jetzt dasteht, macht es fuer Python zwar Sinn (deswegen kein IndentationError), aber es ist eben nicht das, was du vorhast. Python kann keine Gedanken lesen. :wink:

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:01
von bluelagoon
naja ich versuchs mal aber was ich nicht ganz versteh warum if eine elif annimmt und die zweite als problem darstellt ...

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:05
von Pekh
Weil dazwischen mit dem try-Block halt was anderes kommt. Dieser steht auf der selben Einrückungsebene wie das 'if', und damit ist für Python der 'if'-Block abgeschlossen. Und ein 'elif' ohne 'if', wie es danach kommt, geht halt nicht.

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:06
von Hyperion
bluelagoon hat geschrieben:warum denn nicht hyperion?
Musst Du mal im Board suchen. BlackJack hatte iirc dazu auch mal eine Kritik geschrieben auf seiner HP.
Du hattest doch "A Byte of Python" benutzt - das ist doch ganz gut. Wozu also der Wechsel?

Im übrigen hatte ich Dir mal einen saubereren Ansatz vorgeschlagen (bzw. den Code zu vorangegangenen Vorschlägen geliefert): http://python-forum.de/viewtopic.php?p=179721#p179721

Das würde einige if-elif-else Kaskaden obsolet gestalten und den Code strukturierter wirken lassen.

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:11
von bluelagoon
naja was heisst wechsel ich hab das if net ganz verstanden und deswegen das im galileo nochmal nachgelesen naja hyperion danke für das rauskramen nur das isn problem für mich ne Funktion zu schreiben. Joa Pekh das leuchtet mir ein, aber wenn ich den block verschieb das er eingerückt ist bekomm ich immerdiese identationerror

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:16
von mkesper
Wo liegt dein Problem mit Funktionen?

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:22
von bluelagoon
ah ^^ hab jetz den block eingerückt uuuund funktioniert hihi Danke für die Hilfe :)

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:24
von Pekh
bluelagoon hat geschrieben:naja was heisst wechsel ich hab das if net ganz verstanden und deswegen das im galileo nochmal nachgelesen naja hyperion danke für das rauskramen nur das isn problem für mich ne Funktion zu schreiben. Joa Pekh das leuchtet mir ein, aber wenn ich den block verschieb das er eingerückt ist bekomm ich immerdiese identationerror
Poste bitte mal den Quellcode mit eingerücktem 'try' . Ich glaube ja, daß du da was ganz komisches machst. Rückst du es etwa nur 1-3 Spalten ein (Sprich: Hast du es auf der Ebene vom 'os.system' oder nicht)?

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:35
von bluelagoon
ne das problem mit dem try ist gelöst aber shutdown is undefiniered

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:39
von lutz.horn
'shutdown' wird innerhalb des 'elif'-Blocks definiert. Das ist natürlich möglich, diese Funktion ist aber außerhalb des 'elif'-Blocks nicht sichtbar.

Edit: Poste doch mal Deinen jetzt aktuellen Code. So müssen wir ziemlich raten.

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 09:40
von bluelagoon
ah du hast mich dadurch drauf gebracht auf meinen Fehler Juhu danke danke danke :)

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 10:55
von bluelagoon
weil wir ja schon den Thread offen haben und ich nicht nochmal aufmachen will, ich möchte gern das meine clients dieses skript so ausgeführt wird das es in geregelten abständen sagen wir 30 tagen abläuft. wäre sowas vll möglich? wäre euch sehr Dankbar :)

Re: if-elif Problemchen :D

Verfasst: Dienstag 21. September 2010, 10:56
von lutz.horn
Meinst Du, dass das Skript nach 30 Tagen nicht mehr ausführbar sein soll?