Sie brauchen hier keine Ausnahmeprüfung. Außerdem wird Ihre bedingte Anweisung das TypeError
nicht auslösen. Verwenden Sie stattdessen einfach Ihre bedingte Anweisung, um Ihre Schleife fortzusetzen. Dies erfordert auch nicht, dass Sie auch hier eine continue
Anweisung verwenden müssen.
Darüber hinaus werden alle input
Aufrufe eine Zeichenfolge zurückgeben, so dass Sie nicht als solche zu wirken brauchen. So einfach Ihre Eingabe nehmen, ohne die str
Aufruf:
while True:
user = input('Enter users sex:')
if user == 'female' or user == 'male':
break
else:
print('Please enter male or female')
print('The user is:', user)
Wenn Sie diese in eine Funktion setzen wurden, können Sie einfach zurückgeben Ihr Endergebnis einmal zufrieden und dann drucken Sie das „Ergebnis“ von dem, was diese Funktion zurückkehrt. Das folgende Beispiel soll dies verdeutlichen:
def get_user_gender():
while True:
user = str(input('Enter users sex:'))
if user == 'female' or user == 'male':
break
else:
print('Please enter male or female')
return 'The user is: {}'.format(user)
user_gender = get_user_gender()
print(user_gender)
Kleine Anmerkung, werden Sie feststellen, ich eingeführt, um die format
String-Methode. Es macht das Manipulieren von Strings ein bisschen leichter, indem man sich an die Gewohnheit gewöhnt, auf diese Weise mit der Manipulation/Formatierung von Strings umzugehen.
Weil das 'try' selbst nicht fehlschlägt. Sie können eine ganze Zahl in ihre String-Darstellung konvertieren, aber es ist nicht gleich "weiblich" oder "männlich". – roganjosh
Hinweis: 'str (3)' wirft keinen 'TypeError'. –
Ich denke, die einfache Antwort auf Ihre Frage ist, dass, wenn der Benutzer eine Ganzzahl (sagen wir 5) eingibt, Sie nicht ein "int" von "Eingabe" zurückbekommen, sondern stattdessen "5", was ein 'ist str' selbst. –