Üç şeyden birini döndürebilir bir işlevi var:
- başarı (
True) - başarısızlık (
False) - akış okuma / ayrıştırma hatası (
None)
Sorum şu: Eğer test etmem gerekirse Trueya Falseda sonucun ne olduğunu nasıl görmeliyim. Aşağıda şu anda bunu yapıyorum:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
== Trueparçayı kaldırmak kadar basit mi yoksa üç boollu bir veri tipi mi eklemeliyim. İstemediğim simulateben bir hata ile yapmak dış programı o log ve devamı olduğunu istediğiniz tüm olarak işlev bir özel durum.
simulateİşlev içinde tüm istisnaları yakalarım; Simülatörün içinde olan hiçbir şeyin programın geri kalanını durdurmasını (ve sonraki öğeyi işlemesini) istemiyorum. Ama cevaplar fikrimi değiştirmemi sağlıyor.
simulateyakalayabileceği ve tekrar deneyebileceği şeyler varsa, bu iyi. Ama eğer "başarısız olursa", geri dönmemelidir None. Sadece komut dosyası olarak adlandırılan komut dosyasına bir istisna getirmelidir. Her iki durumda simulateda yapılır. Geri dönmek None, uygun bir istisnayı yükseltmek veya bir istisnanın simulateişleme için çağrı komut dosyasına yayılmasına izin vermek kadar yararlı değildir .
except Exception:bunun yerine kullanın. Bu, Warningve ile birlikte tüm "gerçek" hataları yakalar StopIteration. Bu izin verir KeyboardInterruptve SystemExitolsa yoluyla. Bunları gerçekten yakalamak istiyorsanız, muhtemelen "hata" olmadığı için niyetinizi açıkça belgeleyen başka bir dış deney / dış veya başka bir yapı kullanmak en iyisidir. (Ama "neredeyse hiç" demedim ... belki senin durumunda, gerçekten her şeyi kapmak istiyorsun ve hatta Ctrl-C'yi veya sys.exit()çıkmayı, vb. Önlemek istiyorsun )