Saya menulis skrip yang melakukan sesuatu pada file teks (apa yang dilakukannya tidak relevan untuk pertanyaan saya). Jadi sebelum saya melakukan sesuatu pada file saya ingin memeriksa apakah file itu ada. Saya bisa melakukan ini, tidak ada masalah, tetapi masalahnya lebih pada estetika.
Ini kode saya, menerapkan hal yang sama dalam dua cara berbeda.
def modify_file(filename):
assert os.path.isfile(filename), 'file does NOT exist.'
Traceback (most recent call last):
File "clean_files.py", line 15, in <module>
print(clean_file('tes3t.txt'))
File "clean_files.py", line 8, in clean_file
assert os.path.isfile(filename), 'file does NOT exist.'
AssertionError: file does NOT exist.
atau:
def modify_file(filename):
if not os.path.isfile(filename):
return 'file does NOT exist.'
file does NOT exist.
Metode pertama menghasilkan output yang sebagian besar sepele, satu-satunya hal yang saya pedulikan adalah bahwa file tersebut tidak ada.
Metode kedua mengembalikan string, itu sederhana.
Pertanyaan saya adalah: metode mana yang lebih baik untuk memberi tahu pengguna bahwa file tersebut tidak ada? Menggunakan assert
metode ini sepertinya lebih bersifat pythonic.
modify_file()
adalahwith open(filename) as f:
, makaIOError
juga akan dinaikkan. Dan versi Python yang lebih baru telah memberikan lebih banyak detail dalam subclassIOError
(FileNotFoundError
khususnya yang muncul di benak) yang dapat membantu pengembang menggunakan API ini. Jika kode melakukan pemeriksaan dan menaikkan sendiriIOError
maka detail yang bermanfaat akan hilang.assert
dimaksudkan untuk kasus-kasus di mana pemrogram memanggil fungsi membuat kesalahan, sebagai lawan pengguna . Menggunakan diassert
bawah keadaan itu memungkinkan Anda untuk memastikan seorang programmer menggunakan fungsi Anda dengan benar selama pengujian, tetapi kemudian menghapusnya dalam produksi.Nilainya agak terbatas karena Anda harus memastikan bahwa Anda menjalankan jalur itu melalui kode, dan Anda sering ingin juga menangani masalah dengan
if
pernyataan terpisah dalam produksi.assert
paling berguna dalam situasi seperti, "Saya ingin membantu mengatasi masalah ini jika pengguna memukulnya, tetapi jika pengembang memukulnya, saya ingin itu macet keras sehingga dia akan memperbaiki kode yang menyebut fungsi ini tidak benar."Dalam kasus khusus Anda, file yang hilang hampir pasti merupakan kesalahan pengguna, dan harus ditangani dengan memunculkan pengecualian.
sumber
Dari UsingAssertionsEffective
sumber