if-elif Problemchen :D

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.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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.
https://www.xing.com/go/invite/18513630.6a91d4
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Der try-except block is ja auch falsch eingerückt.
Bottle: Micro Web Framework + Development Blog
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

naja aber sonst wird ja nich gemeckert das was falsch eingerückt wäre :(
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

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...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

warum denn nicht hyperion?
Weisst du vll wo mein Fehler liegen könnte :(
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

naja ich versuchs mal aber was ich nicht ganz versteh warum if eine elif annimmt und die zweite als problem darstellt ...
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

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
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Wo liegt dein Problem mit Funktionen?
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ah ^^ hab jetz den block eingerückt uuuund funktioniert hihi Danke für die Hilfe :)
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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)?
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ne das problem mit dem try ist gelöst aber shutdown is undefiniered
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

'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.
https://www.xing.com/go/invite/18513630.6a91d4
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ah du hast mich dadurch drauf gebracht auf meinen Fehler Juhu danke danke danke :)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

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 :)
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Meinst Du, dass das Skript nach 30 Tagen nicht mehr ausführbar sein soll?
https://www.xing.com/go/invite/18513630.6a91d4
Antworten