Python 3.x Python代码跳过try/except子句
我正在做一个课堂作业,我需要提出两个例外。 第一个异常:如果用户的条目小于0或大于100,我应该引发并处理一个异常。然后,代码应再次向用户询问数字 第二个异常:如果找不到特定文件,异常会请求文件名,然后再次进行搜索 在这两种情况下,我都不能让例外发生。换句话说,如果在第一个异常中,我输入了一个大于100或小于0的数字,那么程序将继续,并且根本不记录该输入的任何内容。如果我打印用户的条目,我会得到“none”,而不是except子句应该显示的错误消息。同样,在第二个异常中,如果找不到文件,代码将停止执行,而不是触发异常 我尝试手动引发一个异常(如下所示),但这会创建一个我不想要的回溯——我只希望第一个异常打印错误消息并调用函数,第二个异常请求输入并调用函数 第一个例外:Python 3.x Python代码跳过try/except子句,python-3.x,exception-handling,try-except,Python 3.x,Exception Handling,Try Except,我正在做一个课堂作业,我需要提出两个例外。 第一个异常:如果用户的条目小于0或大于100,我应该引发并处理一个异常。然后,代码应再次向用户询问数字 第二个异常:如果找不到特定文件,异常会请求文件名,然后再次进行搜索 在这两种情况下,我都不能让例外发生。换句话说,如果在第一个异常中,我输入了一个大于100或小于0的数字,那么程序将继续,并且根本不记录该输入的任何内容。如果我打印用户的条目,我会得到“none”,而不是except子句应该显示的错误消息。同样,在第二个异常中,如果找不到文件,代码将停
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)
对于第一个,您必须手动提升它,因为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()
def grade():
#输入学生的平均成绩
avgGrade=int(输入(“输入平均等级:”)
尝试:
如果avgGrade>0且avgGrade<100:
返回平均值
其他:
提升值错误()
除值错误外:
打印(“等级必须是介于0和100之间的数字”)
返回等级()
对于第二个调用,必须在第二个调用中返回值。
使用
returndisplaygrades(allstudent)
而不是displayGrades(allStudents)
听起来像是要引发异常并处理它。您确实需要一个用于继续而不是递归的循环,例如:
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
def displayGrades(allStudents):
while True:
try:
with open(allStudents, "r") as grade_file:
...
except IOError:
allStudents = input("Please enter correct file name: ")
continue
break
虽然我会提醒在同一个函数中混合参数传递和用户输入-通常在用户最初提供文件名的地方捕获和处理异常。因此,在本例中,它可能是调用函数。您能修复缩进吗?另外,IOError
在python 3中仍然作为OSError
的同义词存在。感谢大家的提醒,我的教科书使用IO,但我宁愿使用更常见的术语。Shady Atef,当我实现这段代码时,我会收到错误消息和请求一个新数字。但是,与我之前的代码一样,发生了同样的事情:新的数字不会返回,并且在打印时显示为“none”。其思想是使用递归调用,并且不返回第二次grade()
调用的值。第二个也是一样。我同意第一个是人为的,但它是针对家庭作业的。感谢第二条上的警告,但同样,作业说明“异常应导致程序要求正确的文件名”--文件名已在程序的前面指定,但不是由用户指定的。多谢