有没有一种方法可以使用try-except语句来显示哪个参数不正确



我自己对python一无所知,这个问题是我在帮助他编写代码后2小时内提出的。

这个代码是他为课堂编写的代码:

# Assignment 4-1
import sys
def calcavg(grade1, grade2, grade3):
average = (grade1 + grade2 + grade3) / 3
return(average)
def getletter(score):
if (100 < score) or (score < 0):
lettergrade = "Bad Score"
elif score >= 90 :
lettergrade = "A"
elif score >= 80 :
lettergrade = "B"
elif score >= 70 :
lettergrade = "C"
elif score >= 60 :
lettergrade = "D"
else:
lettergrade = "F"
return(lettergrade)
def printresults(average, lettergrade):
print("Average: " + str(average))
print("Letter Grade: " + str(lettergrade))
try:
grade1 = float(sys.argv[1])
grade2 = float(sys.argv[2])
grade3 = float(sys.argv[3])
average = calcavg(grade1,grade2, grade3)
lettergrade = getletter(average)
printresults(average, lettergrade)
except:
print("Error. Grade must be numeric.")
#else:
#   average = calcavg(grade1,grade2, grade3)
#   lettergrade = getletter(average)
#   printresults(average, lettergrade)

对我来说,最后的其他东西似乎是多余的,所以我试着把它移走了。我的想法是,它不应该尝试运行代码,如果没有失败,它应该尝试运行并给出结果,除非出现问题。我认为在更大的剧本中,他的方式会变慢。

这让我们看看他以前的课程,他们在哪里尝试过,如果没有失败,就会尝试其他东西。我没有这个例子,但它有点像

try:
except:
else:
try:
except:
else:
done

我们合作编写了一个脚本,该脚本将同时尝试这两种方法,并告诉你哪一种失败了,如果第一次尝试没有失败,则不尝试其他方法,但仍然告诉你哪种失败了。如果两者都失败了,很容易尝试并打印错误,但告诉你哪一个是错误是我们被绊倒的地方。

这是我在某个时候写的代码:

import sys
test1 = sys.argv[1]
test2 = sys.argv[2]
try:
int(test1),int(test2)
except:
if test1 != int:
print("test1 error")
if test2 != int:
print("test2 error")
else:
print("Ok")

如果其中一个错误,但只打印"test1 error test2 error",或者如果第二个if是elif:"test1 errors",则此操作将失败。我们遇到的大多数问题是,它根本不关心像test1 = inttest2 != int这样的线路,即使是

try:
isinstance(test1, int),isinstance(test2, int)
except:
if not test1:
print("test1 error")
if not test2:
print("test2 error")

它似乎会判断test1是否为假,并继续打印"Ok"。

正如评论中所指出的,您对python的理解有点错误。我建议你进一步澄清你的一些基本概念。

然而,为了回答您的问题,我认为您应该提出自定义异常。它们对你的情况非常有用。在下面的代码中,我介绍了如何测试哪个参数失败:

try:
grade1 = float(sys.argv[1])
grade2 = float(sys.argv[2])
grade3 = float(sys.argv[3])
average = calcavg(grade1,grade2, grade3)
lettergrade = getletter(average)
printresults(average, lettergrade)
except Exception as ex:
print("Error. Grade must be numeric.")
print(ex)

因此,您只需要添加except Exception as ex:,这将打印异常的实际原因。

最新更新