Şuna benzer bir kodum var:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
tamam yani bu basitleştirildi ama anladınız. Şimdi thingaslında listede olmayabilir, bu durumda -1'i olarak geçirmek istiyorum thing_index. Diğer dillerde index(), öğeyi bulamazsa döndürmeyi umduğunuz şey budur . Aslında bir ValueError.
Bunu yapabilirim:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Ama bu kirli hissettiriyor, ayrıca ValueErrorbaşka bir nedenden dolayı yükseltilebilir mi bilmiyorum . Jeneratör işlevlerine göre aşağıdaki çözümü buldum, ancak biraz karmaşık görünüyor:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Aynı şeyi elde etmenin daha temiz bir yolu var mı? Listenin sıralanmadığını varsayalım.
str.findTam olarak bunu yapan bir yöntem var: öznede -1iğne bulunmadığında geri döner .
str.index()arama dizesi bulunmazsa bir istisna oluşturur.
thing_index." - Bu kesinlikle Pythonic değil. Bir işlemin başarılı olmaması durumunda (anlamsız) bir belirteç değeri iletmek hoş karşılanmaz - burada istisnalar gerçekten doğru yoldur. Özelliklething_list[-1]geçerli bir ifade olduğundan, listedeki son girdi anlamına gelir.