Python 为什么我在尝试与字典值进行比较时出错?
我应该: 编写一个函数precision(d,a,b),该函数接受以下参数: d:将一个季节映射到该季节的降水量的字典。 a:一季 b:又是一季 如果季节a的降雨量大于季节b,则函数应返回True,否则返回False。如果降雨量相等,则返回False 您的函数应通过以下方式处理以下错误: 如果a或b在字典中不是有效的季节,则应返回一条格式完全如下的错误消息(作为字符串): “错误:键不在字典中。” 如果每个季节的降雨量值不能进行比较,即其中一个不是数字,则返回一条格式完全如下的错误消息(作为字符串): “错误:字典中的数据类型无效?” 您可以假设没有任何测试用例会产生这两种类型的错误(因此,当您遇到这两种错误时,您不需要决定是否返回键错误或无效类型错误)。然而,你不应该对存在的季节做任何假设——有时可能会有一个“土豆”季节 我写了一个基本正确的函数Python 为什么我在尝试与字典值进行比较时出错?,python,dictionary,Python,Dictionary,我应该: 编写一个函数precision(d,a,b),该函数接受以下参数: d:将一个季节映射到该季节的降水量的字典。 a:一季 b:又是一季 如果季节a的降雨量大于季节b,则函数应返回True,否则返回False。如果降雨量相等,则返回False 您的函数应通过以下方式处理以下错误: 如果a或b在字典中不是有效的季节,则应返回一条格式完全如下的错误消息(作为字符串): “错误:键不在字典中。” 如果每个季节的降雨量值不能进行比较,即其中一个不是数字,则返回一条格式完全如下的错误消息(作为字符
def precipitation(d, a, b):
try:
if d[a] > d[b]:
return True
else:
return False
except:
if a not in d or b not in d:
return ("Error: Key is not in Dictionary.")
if d[a] not in (int) or d[b] not in (int):
return ("Error: Invalid data types in Dictionary?")
当我用测试用例运行这个函数时
precipitation({"Spring": 'cats', "Summer": 313, "Fall": 1457, "Winter": 354}, "Summer", "Spring") == 'Error: Invalid data types in Dictionary?'
我犯了一个错误
类型为“type”的参数不可编辑
如何修复此问题以及问题的原因这是您的问题:
if d[a] not in (int)
int
不是一个容器,它是一种类型,因此d[a]
不能在其中*
你想确定它是整数吗?然后尝试isinstance()
:
*您可以编写一个元类,该元类有一个
\uuuu contains()
方法,该方法允许您将类型视为容器,并以这种方式检查实例类型,这实际上是一种有趣的想法,但int
不能做到这一点。要检查参数是否为特定类型,在中使用isinstance
-检查iterable中是否存在特定值
if not isinstance(d[a], int) or not isinstance(d[b], int):
return ("Error: Invalid data types in Dictionary?")
使用此选项,因为这正是错误处理的方法
if ValueError:
return ("Error: Invalid data types in Dictionary?")
而不是
if if d[a] not in (int) or d[b] not in (int):
return ("Error: Invalid data types in Dictionary?")
除了已经提供的正确答案外,
由于您正在使用try
和except
,因此还可以为每个块指定异常类型:
def沉淀(d、a、b):
尝试:
返回d[a]>d[b]
除KeyError外:
return“错误:键不在字典中。”
除类型错误外:
return“错误:字典中的数据类型无效?”
使用好的变量名。捕获确切的异常类型。问题语句未指定数据类型必须为int。您需要在比较这些类型之前检查它们。如果else在您返回它正在检查的表达式时是多余的。您的意思是除了ValueError之外的吗?如果出现值错误,例如我们将字符串与整数进行比较,那么这是一个值错误,因此我们的程序将跳转到ValueError块。如果始终采用ValueError
,则ValueError
是真实的。
if if d[a] not in (int) or d[b] not in (int):
return ("Error: Invalid data types in Dictionary?")