Код Python пропускает предложение try/ кроме
Я работаю над заданием класса, в котором мне нужно поднять два исключения. Первое исключение: я должен вызывать и обрабатывать исключение, если запись пользователя меньше 0 или больше 100. Затем код должен снова попросить пользователя ввести цифру.
Второе исключение: если определенный файл не найден, исключение запрашивает имя файла, а затем поиск повторяется.
В обоих случаях я не могу сделать исключение. Другими словами, если в первом исключении я введу цифру больше 100 или меньше 0, программа продолжит работу и просто не будет ничего записывать для этой записи. Если я распечатываю запись пользователя, я получаю "none", а не сообщение об ошибке, которое должно отображаться в условии кроме. Аналогично, во втором исключении, если файл не найден, код просто прекращает выполнение, а не вызывает исключение.
Я попытался вручную вызвать исключение (как в этом вопросе / ответе), но это создает обратную трассировку, которую я не хочу - я просто хочу, чтобы первое исключение выводило сообщение об ошибке и вызывало функцию, а второе - для запроса ввода и вызвать функцию.
Первое исключение:
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()
Второе исключение:
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)
3 ответа
Похоже, упражнение заключается в raise
исключение и обработать его. Вам действительно нужен цикл для продолжения, а не рекурсии, например:
def grade():
while True:
try:
avgGrade = int(input("Enter average grade: "))
if avgGrade < 0 or avgGrade > 100:
raise ValueError()
except ValueError:
print("Grade must be numeric digit between 0 and 100")
continue # Loop again
break # Exit loop
return avgGrade
Но это придумано с целью исключения, так как исключения в этом случае не нужны.
Для вашего другого примера это менее надумано, потому что функция downstream вызывает исключение, например:
def displayGrades(allStudents):
while True:
try:
with open(allStudents, "r") as grade_file:
...
except IOError:
allStudents = input("Please enter correct file name: ")
continue
break
Хотя я бы рекомендовал смешивать передачу аргументов и ввод данных пользователем в одной и той же функции - обычно исключение отлавливается и обрабатывается там, где пользователь изначально предоставляет имя файла. Так что в этом примере это, вероятно, будет вызывающая функция.
Для первого вы должны поднять его вручную, так как python не будет угадывать вашу логику и поднимет его для вас.
def grade():
#input student's average grade
avgGrade = int(input("Enter average grade: "))
try:
if avgGrade > 0 and avgGrade < 100:
return avgGrade
else:
raise ValueError()
except ValueError:
print("Grade must be numeric digit between 0 and 100")
return grade()
Для второго вы должны вернуть значение во втором вызове. использование return displayGrades(allStudents)
вместо displayGrades(allStudents)
Попробуй это:
def get_value(data_list, index):
return data_list[index]
# Sample list data
my_list = ['a', 'b', 'c']