Verständnisfrage:

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.
hammelwade
User
Beiträge: 19
Registriert: Dienstag 6. März 2012, 10:11

@webspider: Naja Fehlerbehandlung ist ja nicht mein vorrangiges Ziel, ich habe eine Liste indem mehrere Server sind und ich benötige den Rückgabewert dafür, damit ich die Rechner rauslöschen kann, die nicht erreichbar sind.

Ok ich habe jetzt das Try except Modell etwas verstanden und versuche mir grade auszumahlen wie ich das verwenden kann.
Aber ich versuche mich grad erstmal nochmal an dem Tutorial und les es mir besser durch ich hab gemerkt das ich da doch noch etwas nachhol bedarf habe, ich dachte bzw. hab gehofft das zu vermeiden aber ist anscheinend ja doch nicht ganz so einfach von AutoIt auf Pytho zu wechseln... wenn ich mit dem Tut durch bin, mach ich an dieser Stelle hier weiter.
deets

Ich denke du hast da noch etwas fundamental nicht begriffen: Fehlerbehandlung ist im Programmieren nichts besonderes. Das macht man andauernd, und da geht es nicht immer um Fehler in dem Sinne, oder was passieren soll, wenn jemand ein AK47 Magazin in deinen Rechner entleert.

In deinem Beispiel zB ist eine Verbindung von Rechner A nach B dann erfolgreich, wenn sie zustande kommt. Wenn nicht, dann ist das ein Fehler. Exakt so sind dann auch die Schnittstellen definiert. In einer Sprach wie C mangels anderer Ausdrucksmoeglichkeiten oft mit Rueckgabewerten oder fehler-Referenzen, zB so:

Code: Alles auswählen

BOOL ping(char *hostname, *double delay);

...
double delay;
if(ping("googl.com", &delay) {
   printf("hurra, nur %f millisekunden nach Google!\n", delay);
} else {
  printf("google ist tot!\n");
}
Das heisst nur wenn der Rechner erreichbar war (ping also True zurueckliefert), ist der Wert in delay gueltig. Und sehr oft findet man leider code, der solche Rueckgabewerte ignoriert.

Python hat stattdessen Ausnahmen (Exceptions). Damit wird "Fehlerbehandlung" besser gehandhabt, weil nicht so schnell vergessen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

deets hat geschrieben:Ich denke du hast da noch etwas fundamental nicht begriffen: Fehlerbehandlung ist im Programmieren nichts besonderes. Das macht man andauernd, und da geht es nicht immer um Fehler in dem Sinne, oder was passieren soll, wenn jemand ein AK47 Magazin in deinen Rechner entleert..
Das MUSSTE ich auf die Zitate-Seite kopieren :D
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
curly
User
Beiträge: 3
Registriert: Sonntag 10. Juli 2011, 17:36

[OT] Ich les hier ja nur mit ... aber heut hat sich das ja wirklich besonders rentiert. Die Wiki-Zitate-Seite kannte ich noch nicht.
Göttlich ...
Ich denke, jetzt wird das Wochenende auf jeden Fall super.
[/OT]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Leonidas hat geschrieben:Das MUSSTE ich auf die Zitate-Seite kopieren :D
Zu schade, dass die Links kaputt sind, ich kann grad nicht glauben, was ich alles geschrieben haben soll :twisted:

Aber um beim Thema zu bleiben: ``try ... catch`` dient nicht nur zur Fehlerbehandlung, sondern allgemein zur Behandlung von aussergewoehnlichen Ereignissen (Exception -> Ausnahme/Sonderfall). Viele Standardexceptions _sind_ Fehler, aber nicht alle. Zum Beispiel zeigt die ``KeyboardInterrupt`` Exception die besondere Situation an, dass der User Ctrl+c gedrueckt hat (und wahrscheinlich gerne die Anwendung beenden moechte) und die ``StopIteration`` Exception zeigt an, dass der Iterator erschoepft ist und sich die ``for`` Schleife die ihn abarbeitet bitte beenden soll.

aus "Dr. Strangeloop -- How I stopped worrying and love the Exception".
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

cofi hat geschrieben:
Leonidas hat geschrieben:Das MUSSTE ich auf die Zitate-Seite kopieren :D
Zu schade, dass die Links kaputt sind, ich kann grad nicht glauben, was ich alles geschrieben haben soll :twisted:
Off-Topic: Hab sie mal korrigiert, damit du dir sicher sein kannst, dass das alles stimmt …
hammelwade
User
Beiträge: 19
Registriert: Dienstag 6. März 2012, 10:11

So da bin ich wieder,

also ich denke ich hab das mit try and catch einigermaßen Verstanden und versuche es in laufe meines Skripts anzuwenden.

Zum Thema ping, ich habe jetzt eine für mich geeignete Lösung gefunden, ich ärger mich zwar ziemlich das ich da erst so spät drauf gekommen bin, aber ich habe jetzt einfach den ping mechanismuss von Linux mit "popen" verwendet, der mir Ordnungsgemäß eine 0 für "OK" und eine 1 für fehler zurück gibt, also quasi genau das was ich haben wollte.
Das Modul war ja schön und gut aber ich wollte ja eigentlich auch nicht den Ping neu erfinden, sondern ihn nur simple anwenden damit ich meine Aufgabe endlich erledigen kann und als Anfänger da durchzusteigen was da drin stand war ein wenig viel für den Anfang... aber jetzt habe ich ja eine Lösung.

Jetzt stehe ich grade nur vor einem anderen Problem... Ich möchte die Liste mit den IP Adressen die ich scannen will am besten in einer xml Datei speichern bzw. auslesen, da man da eine sehr schöne übersicht hat und einfach einzelne Elemente ansprechen kann.

ich hab dazu das Standardmodul xml.dom.minidom in benutzung. Nur bekomm ich es irgendwie nicht hin eine Datei zu erstellen, wenn ich folgenden Code verwende wie es auch in den zich tutorial drin steht, die ich mir angesehen habe, funktioniert es dennoch nicht:

Code: Alles auswählen

import xml.dom.minidom as dom

doc= dom.Document()
hosts_element = doc.createElement("hosts")
doc.appendChild(hosts_element)
    
wobei ich mich auch jedes mal frage, wo er denn bitte die Datei erstellen will... Aber so stehts in jedem tut...
Was mache ich falsch ? ich will einfach erstmal überhaupt sehen, das eine Datei erstellt wurde...

Edit: ok wenn ich es jetzt richtig gelesen habe, erstelle ich die XML datei erstmall Virtuell und muss sie dann noch in eine Datei schreiben... suche den halben Tag danach, schreibe nun aus verzweiflung ins Forum und finde dann 2 min später etwas oder wie...
Zuletzt geändert von hammelwade am Dienstag 13. März 2012, 15:37, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn Du das mit ``try...catch`` verstanden hast, kapiere ich nicht, wieso Du nicht bei dem Modul geblieben bist. Das warf doch laut Aussagen von Leuten hier im Thread einen Fehler, wenn der ``ping`` keinen Erfolg hatte. /me hatte Dir doch eine schöne Möglichkeit aufgezeigt, wie Du das selber bei Dir anwenden kannst.

Für Deine andere Frage gilt: Neues Problem -> Neuer Thread! Es wird Leute geben, die sich beim Thema XML angesprochen fühlen, beim Thema "ping" aber nicht. Diese wirst Du nicht erreichen, wenn Du eine thematisch fremde Frage in diesen Thread einbindest. Bei Bedarf kannst Du einfach auf diesen Thread verlinken, um den Kontext nicht erneut darstellen zu müssen.

Ich warte daher mit meiner Antwort, bis ein Mod dieses Thema splittet, oder Du einfach einen neuen Thread erstellt hast :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hammelwade
User
Beiträge: 19
Registriert: Dienstag 6. März 2012, 10:11

@Hyperion:

Hmm ok ich wollte nicht extra nen neuen Thread aufmachen um Platz zu sparen, aber ok bei dem nächsten Problem, werde ich dies dann tun ;)
hat sich aber auch schon erledigt, ich hab es grad selbst hinbekommen, in dem tutorial vom element.tree wurde es quasi für dumme erklärt, also habe ich es auch endlich verstanden :D was muss der DOM quatsch auch so blöd beschrieben sein... ^^

Das mit dem Ping ist für mich einfach so, das die jetzige lösung aus 3 Zeilen besteht und somit kurz und knackig ist, sowie für mich bestens verständlich, da es meinem bisherigen Programmier Kenntnissen eher entspricht und somit war es mir lieber damit weiter zu machen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dann mal als generelle Empfehlung: Vergiss ``mindom`` und nutze stattdessen die ``ElementTree``-API. Die ist um so viel pythonischer und damit einfacher zu benutzen.

Vielleicht zeigst Du uns noch mal Deine Lösung für das ``ping``-Problem?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hammelwade
User
Beiträge: 19
Registriert: Dienstag 6. März 2012, 10:11

Achso ja, hier hab ich die Lösung entnommen: http://stackoverflow.com/questions/5718 ... nt-results

Ja ich verwende auch grade schon den Element Tree
Antworten