2012-04-12 2 views
2

Dies ist die Strömung, die ich in meinem Programm habeBessere Abdeckung mit try-except-finally und kontext Manager

277: try: 
278: with open(r"c:\afile.txt", "w") as aFile: 
...:  pass # write data, other exceptions/errors can occur here that have to be handled by the caller 
329: except IOError as ex: 
...: print ex 
332: finally: 
333: if os.path.exists(r"c:\afile.txt"): 
334:  shutil.copy(r"c:\afile.txt", r"c:\dest.txt") 

ich alle Pfade mit Ausnahme von der Leitung bedeckt habe 278 an der Leitung 333

  • Ich bekam einen normalen Happy-Flow.
  • I stubbed __builtin__.open IOError zu erhöhen, wenn die offenen mit dem Dateinamen

Aber wie gehe ich von 278 bis 333. Ist dies überhaupt möglich genannt wird?


Zusätzliche Informationen: - mit coverage.py 3.4 (wir bis 3,5 nicht aktualisieren können)

Antwort

0

Ein in der Regel die Strömung in der folgenden Art und Weise

try: 
    with open(r"C:\file.txt", "w") as aFile: 
     a.File.write("!") 
    if os.path.exists(r"C:\file.txt"): 
     shutil.copy(r"C:\file.txt", r"C:\dest.txt") 
except IOError as ex: 
    print ex 
+0

Ja, mir ist das bekannt, aber ich brauche immer noch die Endgültige Klausel "gerade", wenn etwas schief läuft. (Einschließlich prüfen, ob die Datei existiert. Mehr ist in der endgültigen als hier gezeigt getan, so kann ich nicht umgehen. Es gibt Dinge im '# write data' Teil, die einen Fehler verursachen können, aber in der Anrufer dieser Funktion und dann muss der Endteil noch laufen –

+0

Ich habe den Code so umgeschrieben (mit ein paar Änderungen) –

2

Daan, kann es behandelt werden, dass dies entspricht ein Fehler in coverage.py. Ich gehe von Ihrer Beschreibung aus, dass Sie die Filialabdeckung verwenden und dass coverage.py 278-333 angibt. Wenn Sie dies auf einen reproduzierbaren Testfall reduzieren können, erstelle ich ein Ticket dafür.

+0

Werde am Montag versuchen –

+0

Ich konnte das Problem nicht reproduzieren.Ich fand etwas anderes seltsam, obwohl . [Wenn ich dieses Skript ausfühle] (http://codepad.org/0pURCZml) scheint es zu funktionieren. Zeile 13 meldet keine fehlenden Zweige. Jedoch Zeilen 79, 85, 91 und 97 melden teilweise fehlende Zweige zu zwei Linien weiter (81, 87, 93, 99) Das andere Problem besteht jedoch immer noch in unserem Produktionscode (für uns keine große Sache). –