Anda mencampurkan dua hal di sini: Pernyataan dan logika berbasis EAFP.
Pernyataan digunakan untuk memvalidasi kontrak fungsi, yaitu kondisi sebelum dan sesudahnya dan terkadang juga invariannya. Mereka memastikan bahwa suatu fungsi akan digunakan sebagaimana mestinya. Ini bukan untuk aliran kode, karena mereka benar-benar mengganggu eksekusi jika terjadi kesalahan. Contoh umum adalah pemeriksaan argumen None
dalam pemanggilan fungsi.
Di Python, Anda biasanya menghindari penggunaan pernyataan terlalu banyak. Secara umum, Anda harus mengharapkan pengguna kode Anda untuk menggunakannya dengan benar. Misalnya, jika Anda mendokumentasikan suatu fungsi untuk mengambil argumen yang bukan None
, maka tidak perlu ada pernyataan yang memvalidasi argumen tersebut. Sebaliknya, berharap saja ada nilainya. Jika ada kesalahan karena nilai Tidak Ada, maka kesalahan tersebut akan tetap muncul, sehingga pengguna mengetahui bahwa mereka melakukan kesalahan. Namun Anda tidak harus memeriksa semuanya setiap saat.
Sekarang, EAFP adalah sesuatu yang berbeda. Ini digunakan dalam aliran kontrol, atau lebih tepatnya, ini menghindari aliran kontrol tambahan demi mengharapkan segala sesuatunya benar dan menangkap pengecualian jika ternyata tidak benar. Contoh umum yang menunjukkan perbedaannya adalah akses kunci dalam kamus:
# LBYL
if key in dic:
print(dic[key])
else:
handleError()
# EAFP
try:
print(dic[key])
except KeyError:
handleError()
Sekarang ini terlihat sangat mirip, meskipun Anda harus ingat bahwa solusi LBYL memeriksa kamus dua kali. Seperti semua kode yang menangkap pengecualian, Anda hanya boleh melakukannya jika tidak adanya kunci adalah kasus luar biasa. Jadi jika biasanya kunci yang diberikan dikecualikan untuk ada di kamus, maka itu adalah EAFP dan Anda sebaiknya mengaksesnya secara langsung. Jika Anda tidak mengharapkan kuncinya ada di kamus, Anda mungkin harus memeriksa keberadaannya terlebih dahulu (meskipun pengecualian lebih murah di Python, pengecualian tersebut tetap tidak gratis, jadi simpanlah untuk kasus luar biasa).
Manfaat EAFP di sini juga adalah bahwa lebih dalam logika perpustakaan atau aplikasi Anda, di mana key
berasal dari atas, Anda dapat berasumsi bahwa kunci yang valid telah diteruskan di sini. Jadi Anda tidak perlu menangkap pengecualian di sini tetapi biarkan saja pengecualian tersebut muncul ke titik yang lebih tinggi dalam kode Anda sehingga Anda dapat menangani kesalahan tersebut. Hal ini memungkinkan Anda untuk memiliki fungsi tingkat rendah yang sepenuhnya bebas dari pemeriksaan semacam ini.
person
poke
schedule
02.10.2015
try...except
? Haruskah saya mengubah pertanyaannya? - person n1000   schedule 02.10.2015assert
. Rupanya saya tidak menggunakannya dengan benar di masa lalu... - person n1000   schedule 02.10.2015