Posts | ||
---|---|---|
[Python] for loop Error | Locked | |
Thread Options | ||
Oct 4 2014 Anchor | ||
Good Day,
The code should create a MD5 Hash from a Folder and all Files and subfolders there. And then check if the MD5 Hash is in a list on a Server. Many thanks for your help. |
||
|
Oct 4 2014 Anchor | |
Also als erstes solltest du einmal den Code general umschreiben. Da wird "class" benutzt aber dann globale Variablen mit "global" quer durch die Pampa. Ausserdem ist es eine schlechte Idee "path" als globale Variable zu definieren, in einem os.walk loop als Iterator zu verwenden und dann auch noch gleich als Eingabe für die rekursive os.walk Funktion. Mach zuerst einmal die globalen Variabeln weg. Die werden dir beständig in den Arsch beissen, egal was du tust. Jetzt zum eigentlichen Problem. Die Schleife bricht ab, wenn HashStatus auf False wechselt. Ich versteh jetzt nicht, was dieser Code eigentlich genau machen soll, aber er wird bei der ersten Schleife aufgeben, falls der Code nicht in der Liste vorhanden ist. Wenn ich die richtig verstanden hasst, willst du aber zuerst all hashes rechnen und erst dann vergleichen. Hier wird nach jedem berechneten Hash verglichen und die Übung beim ersten Eintrag abgebrochen, der nicht in der Liste ist. Aber vielleicht versteh ich auch nicht das Problem, das du hier versuchst zu lösen, denn der Code ist leder sehr nicht-Pythonisch. |
||
Oct 4 2014 Anchor | ||
Ach du schande, da habe ich einige verbockt beim code :-( Das Problem ist, es wird nur von einer Datei ein Hashwert erstellt. |
||
|
Oct 4 2014 Anchor | |
Vergiss die globalen Variablen. Du hast eine Klasse, also eine Instanz. Der kannst du Variablen zuweisen, welche du für das bearbeiten brauchst. Die anderen Variablen sind sowiso nur methoden-lokale Variablen. UpdatetServer und path zum Beispiel sind Eigenschaften des Objektes. Die kannst du der Objekt-Instanz beim Init einfach zuweisen und später brauchen, so in der Art hier:
Der Rest solltest du damit hinbekommen, denn du hast die Lösung schon selber gesehen. Wegen dem fehlenden break müsste die richtige Zeile die letzte sein, sonst wird HashStatus auf False enden, da nach der richtigen Zeile falsche folgen werden. Edited by: Dragonlord |
||
Oct 5 2014 Anchor | ||
Ich habe trotzdem noch das Problem, das die erste schleife immer nur einmal ausgeführt wird. Oder ist es besser wenn ich zuerst alle Hash erstelle und in eine Liste speichere. Und dann beide listen vergleiche? |
||
|
Oct 5 2014 Anchor | |
Es kommt drauf an, was das Ziel der Übung ist. Wenn es nur darum geht zu prüfen, ob alle Dateien in der Liste sind, dann reicht die Version hier, wo beim ersten Fehler ein False zurück geliefert wird. Übrigens ist die folgende Version hier weniger Fehleranfällig:
Oder wenn ein print benötigt wird:
Edited by: Dragonlord |
Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.