Saya memiliki fungsi yang dapat mengembalikan satu dari tiga hal:
- sukses (
True) - kegagalan (
False) - kesalahan pembacaan / aliran parsing (
None)
Pertanyaan saya adalah, jika saya tidak seharusnya menguji Trueatau False, bagaimana saya harus melihat apa hasilnya. Di bawah ini adalah bagaimana saya saat ini melakukannya:
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"
apakah ini benar-benar sesederhana menghapus == Truebagian atau haruskah saya menambahkan tipe data tri-bool. Saya tidak ingin simulatefungsi untuk melemparkan pengecualian karena semua yang saya ingin program luar lakukan dengan kesalahan adalah log dan lanjutkan.
simulatefungsi saya menangkap semua pengecualian; Saya tidak ingin apa pun yang terjadi di dalam simulator untuk menghentikan sisa program yang sedang berjalan (dan memproses elemen berikutnya). Tetapi jawabannya membuat saya berubah pikiran.
simulatebarang Anda dapat ditangkap dan dicoba lagi, itu bagus. Tetapi jika "gagal", seharusnya tidak kembali None. Seharusnya hanya memunculkan pengecualian pada skrip yang menyebutnya. Either way, simulatedilakukan. Mengembalikan Nonetidak membantu seperti meningkatkan pengecualian yang tepat - atau membiarkan pengecualian menyebar simulateke dalam skrip panggilan untuk ditangani.
except Exception:saja. Ini menangkap semua kesalahan "nyata", bersama dengan Warningdan StopIteration. Itu memungkinkan KeyboardInterruptdan SystemExitmelaluinya. Jika Anda benar-benar ingin menangkapnya, mungkin lebih baik menggunakan yang lain, coba luar / kecuali atau struktur lain yang dengan jelas mendokumentasikan maksud Anda, karena itu bukan "kesalahan". (Tapi saya mengatakan "hampir tidak pernah" ... mungkin dalam kasus Anda, Anda benar-benar ingin mengambil semuanya, dan bahkan mencegah Ctrl-C atau sys.exit()keluar, dll.)