Ich habe diesen Code, der den größten Index eines bestimmten Zeichens in einer Zeichenfolge findet. Ich möchte jedoch, dass ein a ausgelöst wird, ValueError
wenn das angegebene Zeichen in einer Zeichenfolge nicht vorkommt.
Also so etwas wie das:
contains('bababa', 'k')
würde zu einem führen:
→ ValueError: could not find k in bababa
Wie kann ich das machen?
Hier ist der aktuelle Code für meine Funktion:
def contains(string,char):
list = []
for i in range(0,len(string)):
if string[i] == char:
list = list + [i]
return list[-1]
Antworten:
raise ValueError('could not find %c in %s' % (ch,str))
quelle
raise ValueError
stattdessen tun könnenraise ValueError()
?Hier ist eine überarbeitete Version Ihres Codes, die immer noch funktioniert. Außerdem wird veranschaulicht, wie Sie einen Code nach Ihren Wünschen erstellen können
ValueError
. By-the-Art und Weise, denke ichfind_last()
,find_last_index()
oder würde etwas simlar ein beschreibender Name für diese Funktion. Zu der möglichen Verwirrung trägt die Tatsache bei, dass Python bereits über eine Containerobjektmethode mit dem Namen verfügt__contains__()
, die in Bezug auf Mitgliedschaftstests etwas anderes bewirkt.Update - Ein wesentlich einfacherer Weg
Beeindruckend! Hier ist eine viel prägnante versions im Wesentlichen eines Einzeiler-die auch wahrscheinlich schneller ist , weil es umkehrt (über
[::-1]
) die Zeichenfolge , bevor sie eine Vorwärtssuche durch sie für den tut ersten Anpassungs Charakter und es ist mit so schnellen integrierten String -index()
Methode . In Bezug auf Ihre eigentliche Frage besteht ein netter kleiner Bonus, der mit der Verwendung einhergehtindex()
, darin, dass bereits einValueError
Fehler ausgelöst wird, wenn der Zeichensubstring nicht gefunden wird. Daher ist nichts Zusätzliches erforderlich, um dies zu erreichen.Hier ist es zusammen mit einem schnellen Unit-Test:
quelle
for
Schleife. 1. Funktion: FAIL fürcontains('foo', 'f')
.for
Schleife in einer Antwort benötigen oder wollen , obwohl eine zufällig in ihrem eigenen Code erscheint. Wie auch immer, meine erste Funktion zeigt ihnen, wie manraise
einenValueError
Charakter findet, wenn er nicht gefunden wird . und ich habe gezeigt, wie man im Kontext von afor
. Selbst wenn siefor
aus irgendeinem Grund eine wollen , denke ich, dass andere die 2. Version ohne eine zumindest etwas interessant finden könnten.for
Schleife, es ist in einer Art und Weise beantwortet die eigentliche Frage , wie manraise
ein ,ValueError
wenn das Zeichen nicht im String gefunden wird - nämlich durch etwas anderes fordert , dass es für Dich tut. Es besteht auch die Möglichkeit, dass das OP seinefor
Fixierung oder was auch immer überwindet, nachdem es eine Sans-for
Lösung gesehen oder sich später mit Python vertraut gemacht hat.quelle
quelle