এখানে আপনার কোডের একটি সংশোধিত সংস্করণ রয়েছে যা এখনও কাজ করে এবং এটি কীভাবে আপনার পছন্দমতো বাড়ানো যায় তা চিত্রিত করে ValueError। যাইহোক, আমি মনে করি find_last(), find_last_index()বা কিছু সিমলার এই ফাংশনটির জন্য আরও বর্ণনামূলক নাম হবে। সম্ভাব্য বিভ্রান্তিতে যোগ করার বিষয়টি হ'ল পাইথনের ইতিমধ্যে একটি ধারক অবজেক্ট পদ্ধতি রয়েছে __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'
আপডেট - একটি যথেষ্ট সহজ উপায়
কি দারুন! এখানে আরও সংক্ষিপ্ত সংস্করণটি দেওয়া হয়েছে - মূলত একটি ওয়ান লাইনার likely এটি সম্ভবত দ্রুততর কারণ এটি প্রথম মিলিত চরিত্রটির [::-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