Kullanıyorsanız python vs deneyin
Bir gerekçesi try if bir değişken değeri için test ederken kullanmak için inşa eden bir karar var mı?
Örneğin, ya da bir listesini verir ya da bir değer döndürmez bir işlevi yoktur. Bu işleme başlamadan önce sonucu kontrol etmek istiyorum. Aşağıdakilerden hangisi ve neden daha fazla tercih edilir?
result = function();
if (result):
for r in result:
#process items
ya
result = function();
try:
for r in result:
#process items
except TypeError:
pass;
İlgili tartışma:
CEVAP
Sık sık bu Python EAFP tarzı teşvik duymak ("izin daha AF dilemek daha kolay oluyor") LBYL tarzı ("önce leap bak"). Bana, verimlilik ve okunabilirlik meselesi.
Senin örnek (söylemek yerine dönen bir liste veya boÅŸ bir dize iÅŸlevi vardı dönmek bir liste veya None), EÄŸer beklediÄŸiniz ™ kez result aslında içeren bir iterable kullanabilirsiniz, try/except yaklaşım. EÄŸer özel durumlar gerçekten olaÄŸanüstü eÄŸer daha hızlı olacaktır. EÄŸer result zaman P daha None daha sonra if kullanarak muhtemelen daha iyi.
Birkaç ölçüm ile bu destek için:
>>> import timeit
>>> timeit.timeit(setup="a=1;b=1", stmt="a/b") # no error checking
0.06379691968322732
>>> timeit.timeit(setup="a=1;b=1", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.0829463709378615
>>> timeit.timeit(setup="a=1;b=0", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.5070195056614466
>>> timeit.timeit(setup="a=1;b=1", stmt="if b!=0:\n a/b")
0.11940114974277094
>>> timeit.timeit(setup="a=1;b=0", stmt="if b!=0:\n a/b")
0.051202772912802175
Yani, if deyimi iseher zamanmaliyeti neredeyse ücretsiz try/except bir blok kurmak. Ama Exception aslında oluştuğunda, maliyeti çok yüksektir.
Ahlaki:
- Herşey yolunda (ve akış kontrolü için
try/exceptkullanmak için."") pythonic - ama
Exceptions gerçekten olağanüstü anlamda ne zaman ortaya çıkar.
Dokümanlar: Python
EAFP
AF dilemek daha kolay izni. Bu ortak Python kodlama stili geçerli varlığını varsayar anahtarları veya öznitelikleri ve yakalar varsayım ise istisnalar kanıtlıyor yanlış. Temiz ve hızlı tarzı bu. birçok varlığı ile karakterize
tryexcepttablolar. Bu tekniği LBYLile tezat stil birçok diğer diller için ortak C. gibi

Yakalama deneyin-dışında Python keyboa...
Python deneyin-baÅŸka...
Python deneyin...virgül vs' dışın...
Python: eğer bir dize bir tamsayı Dışı...
İyi bir uygulama-dışında-başka deneyin...