Seite 1 von 1
Try und catch
Verfasst: Samstag 22. Mai 2010, 09:32
von mit
Hallo,
wie könnte man für glob ein try catch Block bauen:
Und wie würde ein try catch Block für schreiben aussehen?
Viele Grüße
Re: Try und catch
Verfasst: Samstag 22. Mai 2010, 09:41
von cofi
Und wo soll da eine Exception geworfen werden? `glob.glob` tut das naemlich nicht.
Re: Try und catch
Verfasst: Samstag 22. Mai 2010, 09:44
von Hyperion
mit hat geschrieben:Hallo,
wie könnte man für glob ein try catch Block bauen:
Code: Alles auswählen
try:
for file in glob(os.path.join(Path2files, "*.txt")):
# tue was
except Exception, e:
print e
Natürlich ist das so extrem gefährlich, weil Du jede Exception abfängst. Du musst natürlich noch die genaue Exception angeben und im Code ersetzen.
Und wie würde ein try catch Block für schreiben aussehen?
Da kapiere ich jetzt die Frage nicht. Was ist denn "schreiben". Der Block an sich sieht immer so aus wie oben. Ggf. kommt manchmal ein finally oder ein else dazu. Das kann man aber ja pauschal nicht sagen, da es auf die Logik des konkreten Problems ankommt.
Re: Try und catch
Verfasst: Sonntag 23. Mai 2010, 11:58
von mit
Sorry, ich habe meine Frage nicht klar gestellt. Ich habe Stellen im dem Beispiel Code markiert ('# try ?') die vielleicht Exception benötigen.
Code: Alles auswählen
#!/usr/bin/env python
import os
from glob import glob
def testTry(input_File, output_gffs_file_names):
for line in input_File:
# try ?
output_file_names[line].write('\t'.join(line) + '\n')
if __name__ == '__main__':
output__file_names = {}
input_File = []
# try ?
outputResHandle = open("results.txt", 'w')
# try ?
for line in open("inputFile.txt", 'r'):
line = line.rstrip().split(',')
input_File.append(line)
# try ?
outputResHandle.write(', '.join(input_File[0]) + '\n')
try:
for file in glob(os.path.join("../tests", "*.txt")):
fileNameOutput = os.path.splitext(file)[0] + "-results.txt"
temp = []
# try?
for line in open(file, 'r'):
line = line.rstrip().split('\t')
temp.append(line)
# try ?
output_file_names[file] = open(gffFileNameOutput, 'w')
except Exception, e:
print e
testTry(input_File[1:], output_file_names)
Ich bin leider nicht sicher wie man es Richtig machen könnte um alle Problem abzufangen.
Re: Try und catch
Verfasst: Sonntag 23. Mai 2010, 12:43
von Hyperion
Der Code sieht ziemlich wüst aus. Um es kurz zu machen: Lies einfach in der Doku nach, welche Exception unter welchen Bedingungen von einer von Dir genutzten Funktion geworfen werden. Als Beispiel sei hier mal auf die open() Funktion verwiesen.
Die wichtigste Frage ist jedoch, was Du im Falle einer Exception tun willst. Willst Du mitbekommen, was passiert ist, ohne zu handeln? Oder soll das Programm weiterlaufen?
Generell sollte man niemals mittels "Exception" alle Excpetions abfangen - wie ich ja schon schrieb. Denn dann passiert evtl. etwas von Dir nicht eingeplantes und Du bekommst es nicht mit.
Kannst Du nicht mal kurz erläutern, worum es bei diesem konkreten Beispiel gehen soll?
Nebenbei würde ich Dateien immer mit "with" öffnen; damit wird sie auf jeden Fall geschlossen, egal ob ein Fehler auftrat oder nicht. Und Dateien sollten immer geschlossen werden.
Re: Try und catch
Verfasst: Sonntag 23. Mai 2010, 12:44
von HerrHagen
Probier doch einfach aus welche Exceptions geworfen werden wenn ein bestimmter Fehler auftritt.
Code: Alles auswählen
>>> f = open("gibt_es_nicht.txt", "r")
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
f = open("gibt_es_nicht.txt", "r")
IOError: [Errno 2] No such file or directory: 'gibt_es_nicht.txt'
Diesen Fehler kannst du dann entsprechend abfangen
Code: Alles auswählen
>>> try:
... f = open("gibt_es_nicht.txt", "r")
... except IOError:
... print "Schiefgegangen..."
Schiefgegangen...
Pauschal alle Exceptions abzufangen ist generell keine gute Idee, da vielleicht auch Exceptions abgefangen werden wie SystemExit oder KeyboardInterrupt. Also erst überlegen was passieren könnte, dann überlegen welche Exception dabei geworfen würde und speziell diese dann abfangen. Wenn dann irgendwelche vollkommen unvorhergesehenen Dinge passieren ist es besser wenn diese dann eine nachvollziehbare Fehlermeldung provozieren, als wenn mit einem instabilen Zustand weitergearbeitet wird.
MFG HerrHagen
EDIT: IOError ist vielleicht ein schlechtes Beispiel da sich hier noch eine ganze Menge anderer Fehler verbergen können, aber das Grundprinzip bleibt das gleiche.
Re: Try und catch
Verfasst: Sonntag 23. Mai 2010, 12:57
von b.esser-wisser
Ich glaube, ich bin nicht der einzige, der dich nicht versteht:
- ich versteh nicht was du gerade fragst - zumindest dein letzter Satz klingt, als
hättest du ein konkretes Problem, aber du beschreibst es nicht und du postest keine Fehlermeldungen
- ich verstehe nicht was dein Code tun soll/tut.
Wenn du eine relativ neue Python-version nutzt (>2.5) nimm das with-statement beim öffnen der Dateien (das ersetzt aber try:...finally:.. und nicht try:... except:...).
Werd die globalen variablen los (z.B. output_file_names)
Schreibe ein paar Kommentare da rein, warum du was wie geschrieben hast.
hth, Jörg
PS. Ich kann dein Programm nicht testen und ich hoffe Search&replace hat alle Namen erwischt, aber macht
dieses Programm noch was es soll?