我自己对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 = int
或test2 != 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:
,这将打印异常的实际原因。