यहां आपके कोड का एक संशोधित संस्करण है जो अभी भी काम करता है और यह दिखाता है कि ValueErrorआप जिस तरह से चाहते हैं उसे कैसे बढ़ाएं । इस तरह से, मुझे लगता है find_last(), find_last_index()या कुछ simlar इस समारोह के लिए एक अधिक वर्णनात्मक नाम होगा। संभावित भ्रम में जोड़ना यह तथ्य है कि पायथन में पहले से ही एक कंटेनर ऑब्जेक्ट विधि है जिसका नाम __contains__()कुछ अलग, सदस्यता-परीक्षण-वार है।
def contains(char_string, char):
largest_index = -1
for i, ch in enumerate(char_string):
if ch == char:
largest_index = i
if largest_index > -1: # any found?
return largest_index # return index of last one
else:
raise ValueError('could not find {!r} in {!r}'.format(char, char_string))
print(contains('mississippi', 's')) # -> 6
print(contains('bababa', 'k')) # ->
Traceback (most recent call last):
File "how-to-raise-a-valueerror.py", line 15, in <module>
print(contains('bababa', 'k'))
File "how-to-raise-a-valueerror.py", line 12, in contains
raise ValueError('could not find {} in {}'.format(char, char_string))
ValueError: could not find 'k' in 'bababa'
अद्यतन - एक काफी सरल तरीका है
वाह! यहाँ एक और अधिक संक्षिप्त संस्करण है- अनिवार्य रूप से वन-लाइनर - यह भी तेजी से होने की संभावना है क्योंकि यह पहली मिलान चरित्र के [::-1]लिए इसके माध्यम से आगे की खोज करने से पहले स्ट्रिंग को उलट (के माध्यम से ) करता है और यह तेजी से निर्मित स्ट्रिंग विधि का उपयोग करता है। । आपके वास्तविक प्रश्न के संबंध में, एक अच्छा सा बोनस सुविधा जो उपयोग करने के साथ आता है, वह यह है कि यह पहले से ही उठता है जब वर्ण प्रतिस्थापन नहीं पाया जाता है, इसलिए ऐसा होने के लिए अतिरिक्त कुछ भी आवश्यक नहीं है।index()index()ValueError
यहाँ यह एक त्वरित इकाई परीक्षण के साथ है:
def contains(char_string, char):
# Ending - 1 adjusts returned index to account for searching in reverse.
return len(char_string) - char_string[::-1].index(char) - 1
print(contains('mississippi', 's')) # -> 6
print(contains('bababa', 'k')) # ->
Traceback (most recent call last):
File "better-way-to-raise-a-valueerror.py", line 9, in <module>
print(contains('bababa', 'k'))
File "better-way-to-raise-a-valueerror", line 6, in contains
return len(char_string) - char_string[::-1].index(char) - 1
ValueError: substring not found