Python 棉花糖Str()不起作用,但函数()起作用

Python 棉花糖Str()不起作用,但函数()起作用,python,marshmallow,Python,Marshmallow,我正在试用marshmallow来序列化我的数据对象,因为尽管编写json dict真的非常简单,但出于某种原因,每个人都认为使用包更像python 问题是,它的工作方式和广告上的不一样。Str();执行代码需要函数()字段。我认为这里不需要执行代码,但是Str()不起作用,但是Function()起作用 >>> q.origin 'local.qdb' >>> from marshmallow import Schema, fields >>&

我正在试用
marshmallow
来序列化我的数据对象,因为尽管编写json dict真的非常简单,但出于某种原因,每个人都认为使用包更像python

问题是,它的工作方式和广告上的不一样。
Str();执行代码需要
函数()
字段。我认为这里不需要执行代码,但是
Str()
不起作用,但是
Function()
起作用

>>> q.origin
'local.qdb'

>>> from marshmallow import Schema, fields
>>> class StrSchema(Schema):
        origin = fields.Str()

>>> StrSchema().dump(q)
MarshalResult(data={'origin': ''}, errors={})

>>> class FunctionSchema(Schema):
        origin = fields.Function(lambda x: x.origin)

>>> FunctionSchema().dump(q)
MarshalResult(data={'origin': 'local.qdb'}, errors={})

我错过什么了吗
q
这是一个复杂的对象,但它有一个
\u origin
属性和一个只返回属性的
origin
属性。当我只是创建一个具有这些特征的虚拟对象时,它并没有演示问题。
q
origin
属性中没有诡计,所以我不知道出了什么问题。但是我很感激任何提示。

我找到了答案:它在
utils
文件中,在函数
\u get\u value\u for\u key
中:

def _get_value_for_key(key, obj, default):
    try:
        return obj[key]
    except (KeyError, AttributeError, IndexError, TypeError):
        try:
            attr = getattr(obj, key)
            return attr() if callable(attr) else attr
        except AttributeError:
            return default
    return default
基本上,棉花糖在尝试
getattr
之前会先尝试
\uuu getitem\uuuu
;我的对象在
\uuu getitem\uuu
上返回空,而不是引发一个键错误


这可能是一个文档错误。

经过一段距离后,我发现允许getitem返回None而不是引发一个KeyError是一个不可原谅的错误