Ich arbeite an einer Klassenzuordnung, in der ich zwei Ausnahmen auslösen muss. Erste Ausnahme: Ich soll eine Ausnahme auslösen und behandeln, wenn ein Benutzereintrag kleiner als 0 oder größer als 100 ist. Der Code sollte dann den Benutzer erneut nach der Ziffer fragen.Python-Code überspringt try/except-Klausel
Zweite Ausnahme: Wenn eine bestimmte Datei nicht gefunden wird, fordert die Ausnahme den Dateinamen an und die Suche wird erneut ausgeführt.
In beiden Fällen kann ich die Ausnahme nicht passieren. Mit anderen Worten, wenn in der ersten Ausnahme eine Ziffer eingegeben wird, die größer als 100 oder kleiner 0 ist, fährt das Programm fort und zeichnet einfach nichts für diesen Eintrag auf. Wenn ich den Benutzereintrag drucke, erhalte ich "none" anstelle der Fehlermeldung, dass die except-Klausel angezeigt werden sollte. Wenn in der zweiten Ausnahme die Datei nicht gefunden wird, stoppt der Code einfach die Ausführung, statt die Ausnahme auszulösen.
Ich habe versucht, manuell eine Ausnahme auslösen (wie in diesem question/answer), aber das erstellt eine Traceback, die ich nicht will-- Ich möchte nur die erste Ausnahme die Fehlermeldung drucken und eine Funktion aufrufen und die zweite anfordern Eingabe und Aufruf einer Funktion.
Erste Ausnahme:
def grade():
#input student's average grade
avgGrade = int(input("Enter average grade: "))
try:
if avgGrade > 0 and avgGrade < 100:
return avgGrade
except ValueError:
print("Grade must be numeric digit between 0 and 100")
grade()
Zweite Ausnahme:
def displayGrades(allStudents):
try:
#open file for input
grade_file = open(allStudents, "r")
#read file contents
fileContents = grade_file.read()
#display file contents
print(fileContents)
grade_file.close()
except IOError:
print("File not found.")
allStudents = input("Please enter correct file name: ")
displayGrades(allStudents)
Können Sie Ihren Einzug korrigieren? "IOError" existiert immer noch als Synonym für 'OSError' in Python 3. – tdelaney
Danke für den Kopf, mein Lehrbuch benutzt IO, aber ich würde lieber den Begriff verwenden, der häufiger ist. – momExMachina
Shady Atef, wenn ich diesen Code implementieren, erhalte ich die Fehlermeldung und die Anfrage nach einer neuen Nummer. Aber dann passiert das Gleiche wie bei meinem vorherigen Code: Die neue Nummer wird nicht zurückgegeben und beim Ausdruck als "keine" angezeigt. – momExMachina