如何在Python中避免AttributeError并获取未定义的值?

如何在Python中避免AttributeError并获取未定义的值?,python,object,Python,Object,我对Python有点陌生,我想创建一个函数,该函数接受一个参数,该参数是一个包含多个条目的字典。该函数有一个具有某些给定属性(例如:颜色、标题、描述…)的对象。如果参数中的字典包含名为“color”的条目,则应为对象的属性赋予“color”值,否则对象中的属性“color”应为未定义/空。我知道,在JavaScript中,这只需按如下方式完成: 功能测试(参数){ obj={prop_1:params.prop_1,prop_n:params.prop_n} } 但是,当我在Python中执行

我对Python有点陌生,我想创建一个函数,该函数接受一个参数,该参数是一个包含多个条目的字典。该函数有一个具有某些给定属性(例如:颜色、标题、描述…)的对象。如果参数中的字典包含名为“color”的条目,则应为对象的属性赋予“color”值,否则对象中的属性“color”应为未定义/空。我知道,在JavaScript中,这只需按如下方式完成:

功能测试(参数){
obj={prop_1:params.prop_1,prop_n:params.prop_n}
}
但是,当我在Python中执行此操作,并且参数不包含“prop_1”时,它将返回一个错误并停止。我知道我可以用“尝试”来解决这个问题:


不过,我希望有一种更简单/更简短的方法来实现这一点,Python中有10多个属性,您知道如何使用吗?

使用字典作为
params


好的,如果
params
dict
类型,您可以使用以下方法:


其中,如果
bar
键不存在,则
None
是默认值。

字典在python中是一种单独的数据类型。它们有一个更新方法,例如,如果您有一个默认颜色,并且如果该颜色存在于参数中,则希望更新该颜色:

def test(params):
    obj = {'color': 'black'}
    obj.update(params)

如果您的输入变量
params
是一个字典,并且您希望更新对象的属性,则可以通过迭代字典条目来实现:

class SomeClass():
    pass

def test(params):
    obj = SomeClass()

    for key,val in params.iteritems():
        setattr(obj, key, val)

Python代码中的
params
是什么?这是字典还是对象?这里混合了两种不同的数据结构:字典和对象。首先,您需要澄清您指的是哪一个。很抱歉,如果我的问题描述不清楚,我仍然能够解决它:)您使用
params
的方式表明它是一个对象(使用
.prop_1
访问属性)。如果是字典,您可以使用
params[prop_1]
@ericornelissen访问相应条目。您可以自由投票并接受解决问题的任何答案
>>> params = {"foo": 12}
>>> params.get("bar", None)
None
def test(params):
    obj = {'color': 'black'}
    obj.update(params)
class SomeClass():
    pass

def test(params):
    obj = SomeClass()

    for key,val in params.iteritems():
        setattr(obj, key, val)