Python在检查整数变量时忽略字典值
请帮我回答这个简单的问题Python在检查整数变量时忽略字典值,python,if-statement,dictionary,Python,If Statement,Dictionary,请帮我回答这个简单的问题 x=1 if x["status"] == "Error": print "Fine" elif x == 1: print "Good Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object has no attribute '__getitem__' x=1 如果
x=1
if x["status"] == "Error":
print "Fine"
elif x == 1:
print "Good
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
x=1
如果x[“状态”]=“错误”:
打印“罚款”
elif x==1:
打印“好”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象没有属性“\uuuu getitem\uuuu”
x
是一个函数的返回值,它可以是整数或字典。我不希望我的IF
条件在反之亦然时提醒我。您可以检查x
是否正在使用字典
但是,更可取的是,我宁愿将函数更改为返回一种类型。您可以检查
x
是否正在使用字典
但是,更可取的是,我宁愿将函数更改为返回一个类型。使用type(x)==int检查它是否为int
使用类型(x)=dict检查它是否是dict
然后使用type(x)=int来检查它是否为int
使用类型(x)=dict检查它是否是dict
然后采取适当的措施一个明显的解决方案是稍微修改当前代码以处理错误:
try:
if x["status"] == "Error":
print "Fine"
except TypeError:
if x == 1:
print "Good"
另一个选项是显式检查x
是int
还是dict
:
if isinstance(x, dict) and x["status"] == "Error":
print "Fine"
elif isinstance(x, int) and x == 1:
print "Good"
虽然这消除了Python的duck类型的一些优点;但在第一个版本中,如果提供
x
的函数返回float
(x=1.0
),它仍然可以工作。例如,一个明显的解决方案是稍微修改当前代码以处理错误:
try:
if x["status"] == "Error":
print "Fine"
except TypeError:
if x == 1:
print "Good"
另一个选项是显式检查x
是int
还是dict
:
if isinstance(x, dict) and x["status"] == "Error":
print "Fine"
elif isinstance(x, int) and x == 1:
print "Good"
虽然这消除了Python的duck类型的一些优点;但是在第一个版本中,如果提供
x
的函数返回float
(x=1.0
),它仍然可以工作。例如,使用duck类型最灵活的方法是:
if x == 1:
print("Good")
elif hasattr(x, '__getitem__') and x["status"] == "Error":
print("Fine")
上面的方法接受整数或字典中的任何x
。为了检查字典中某个项的值,需要一个\u getitem\uuuuuu
方法,上面的方法只检查该值,不检查其他值
duck类型有两个原因:一个是用户可能创建自己的类,并期望您的代码使用它们。另一个是官方python类可能会更改。例如,后者发生在python 2-->3转换中。旧代码可能使用了iInstance(x,unicode)将在python3下失败,而使用duck类型的代码可能会继续存在。使用duck类型最灵活:
if x == 1:
print("Good")
elif hasattr(x, '__getitem__') and x["status"] == "Error":
print("Fine")
上面的方法接受整数或字典中的任何x
。为了检查字典中某个项的值,需要一个\u getitem\uuuuuu
方法,上面的方法只检查该值,不检查其他值
duck类型有两个原因:一个是用户可能创建自己的类,并期望您的代码使用它们。另一个是官方python类可能会更改。例如,后者发生在python 2-->3转换中。旧代码可能使用了iInstance(x,unicode)将在python3下失败,而使用duck类型的代码可能会继续存在。首选
isinstance
totype
:首选isinstance
totype
: