Seite 1 von 1

break - Bricht meinen Willen :(

Verfasst: Mittwoch 19. Januar 2005, 14:50
von Gunnar
Moin !
Ich bin es mal wieder. Diesmal allerdings mit einem eindeutigen Problem :
Anscheinend bricht Python mit break nicht nur aus der inneren for-Schleife aus, sondern aus beiden for-Schleifen.

Weiß jemand Rat ?

Code: Alles auswählen

def iterate_second_value(edl_list, index_list):
    edl_list_only_second_value = []
    for each_index in index_list:
        each_index_alone = each_index[0]
        del edl_list[:each_index_alone]
        for x in edl_list:
            try:
                if x[0] == "*" and x[1] == "FROM" and x[2] == "CLIP" and x[3] == "NAME:":
                    edl_list_only_second_value.append(x)
                    break
                else:
                    continue
            except IndexError:
                continue
        return edl_list_only_second_value
In der Doku steht ja, daß break immer nur aus der engsten Schleife ausbricht.

Mfg Gunnar

Verfasst: Mittwoch 19. Januar 2005, 14:56
von Leonidas
Ich nehme mal an, dass das finale return in der äußeren for Schleife sie Schleife beendet, nicht das break in der inneren.

Wäre aber mal gut, wenn du einen Funktionsaufruf postest, so kann ich sie auch mal testen.

Verfasst: Mittwoch 19. Januar 2005, 15:01
von Gunnar
Du hast Recht, das war es.
Allerdings hab' ich noch einen logischen Fehler drin, aber das bekomme ich schon hin.

Bis zum nächsten Mal !

Gunnar

P.S.
Vielen Dank für den guten Support, auch wenn ich manchmal so seltsame Problembeschreibungen abgebe. Da sind meine Synapsen meist schon so verknotet, daß nur noch ich meine Beiträge ansatzweise verstehe :wink:

Verfasst: Mittwoch 19. Januar 2005, 15:07
von Leonidas
Gunnar hat geschrieben:Vielen Dank für den guten Support, auch wenn ich manchmal so seltsame Problembeschreibungen abgebe. Da sind meine Synapsen meist schon so verknotet, daß nur noch ich meine Beiträge ansatzweise verstehe :wink:
Also diese war perfekt verständlich, nur halt der aufruf fehlte, aber dazu hätte ich auch irgendwie selbst kommen können. Schlimmer siehts mit meinen Beschreibungen aus :)

Hach, endlich auch mal ein Problem gelöst 8)

Verfasst: Donnerstag 10. November 2005, 07:06
von henning
Auch hier nochmal von mir eine kleine Verschönerung:

Code: Alles auswählen

def iterate_second_value(edl_list, index_list):
  edl_list_only_second_value = []
  i_alone = index_list[0][0]
  del edl_list[:i_alone]
  for x in edl_list:
    try:
      if x[:4] == ["*", "FROM", "CLIP", "NAME:"]:
        edl_list_only_second_value.append(x)
    except IndexError:
      pass
  return edl_list_only_second_value
Ich hab jetzt die äußerste for-Schleife entfernt, weil in ihr ein return stand, dass die Schleife eh nach dem ersten durchlauf abgebrochen hätte.
Ich weiß natürlich nicht, was deine Funktion genau machen soll, aber vielleicht war ja an der Stelle der logische Fehler, den du suchst?

Verfasst: Freitag 11. November 2005, 09:49
von Gunnar
hehe Henning,

und ich überlegte die ganze Zeit in welchem Hack ich das Snippet verwendet habe...bis ich sah, dass das ein Beitrag von Anfang 2005 war. ;)

Aber weiter so,
meine Programme/Hacks funktionieren meist, sehen aber total hässlich aus. Das würde ich gerne ändern, deshalb hier der Aufruf :

Braucht jemand Hilfe bei seinen Projekten ? Ich würde als Gegenleistung nur Verbesserungen meines Codes wollen...

Meldet euch gerne mal per PN, da der Thread sonst ja völlig Offtopic wird ;)

Gruß,
Gunnar

Verfasst: Freitag 11. November 2005, 10:14
von henning
Naja, also ne helfende Hand könnte ich immer gebrauchen, bloß wenn ich den Code ah nochmal komplett durcharbeiten muss, spart mir das ja auch keine Zeit :-/

Habe im Moment aber auch nichts, was Sinn macht zu "öffnen", wollte aber Anfang nächsten Jahres eventuell was starten, bzw. bei nem anderen Projekt mitmachen. Bis da hin kannst du also noch ein bisschen üben, dann bist du natürlich herzlich eingeladen, dich zu beteiligen.

Verfasst: Freitag 11. November 2005, 15:25
von Joghurt
@Gunnar: Wenn du das "return" durch "yield" ersetzt, hast du den gewünschten Iterator, und die schleife wird nach dem yield auch fortgesetzt.