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
to
type
:首选
isinstance
to
type