Tercih sırasına göre birkaç gruba rastgele üye döndüren bir işlevim vardı."pass" dışında bir neat alternatifi var mı?
def get_random_foo_or_bar():
"I'd rather have a foo than a bar."
if there_are_foos():
return get_random_foo()
if there_are_bars():
return get_random_bar()
raise IndexError, "No foos, no bars"
Ancak get_random_foo
yaptığı ilk şey bu yüzden there_are_foos
gereksiz bir IndexError
değilse Foo'larınız vardır doğrulayıp yükseltmek şudur: Böyle bir şey çıktı. Ayrıca, bir veritabanı dahil ve ayrı işlevler kullanarak bir eşzamanlılık sorunu oluşturur. Buna göre, bunun üzerine böyle bir şey yazdım:
def get_random_foo_or_bar():
"Still prefer foos."
try:
return get_random_foo()
except IndexError:
pass
try:
return get_random_bar()
except IndexError:
pass
raise IndexError, "No foos, no bars"
ama bu kadar az okunabilir bulmak ve ben pass
kullanmak için bir neden olmadı gibi instictively yanlış geliyor önce.
Neatre verimli bir desen var mı, yoksa pass
kabul etmeyi mi öğrenmeliyim?
Not: Diğer türler daha sonra eklenebileceğinden, yuvalamadan kaçınmak istiyorum.
Düzenleme
Teşekkür pass
ince olduğunu söyledi herkes - o güven verici!
Ayrıca istisnayı değiştirmeyi None
döndürme değeriyle önerenler için teşekkürler. Bunun nasıl yararlı bir kalıp olduğunu görebilirim, ancak bu durumda semantik olarak yanlış olduğunu tartışabilirim: işlevlerin imkansız bir görevi yerine getirmeleri istenerek bir istisna oluşturmaları istenmiştir. random
modülünün davranışını izlemeyi tercih ederim (örn. random.choice([])
).
except' tablolarda 'kullanım muhtemelen Python pass'' en yaygın kullanımıdır. Bu yüzden alışırdım. –
"Fakat bunu daha az okunabilir buluyorum ... o, nesnel olarak yanlış hissettiriyor" - bunu kültürel bir sorun olarak düşünün. Şimdi garip görünüyor, ama dili kullanmanın en temiz yolu. – detly