【问题标题】:Error with Stream Framework流框架错误
【发布时间】:2017-04-23 06:42:13
【问题描述】:

我正在尝试设置基本提要:

from stream_framework.feeds.redis import RedisFeed

class PinFeed(RedisFeed):
    key_format = 'feed:normal:%(user_id)s'

class UserPinFeed(PinFeed):
    key_format = 'feed:user:%(user_id)s'


feed = UserPinFeed(13)

但是当我在添加单个活动后运行feed[:2] 时,我不断收到此错误:

<ipython-input-25-41b7cd0d0d8c> in <module>()
----> 1 feed[:2]

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in __getitem__(self, k)
    303         try:
    304             results = self.get_activity_slice(
--> 305                 start, bound)
    306         except StopIteration:
    307             # There's nothing left, even though the bound is higher.

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in get_activity_slice(self, start, stop, rehydrate)
    354         print 'line 350'
    355         if self.needs_hydration(activities) and rehydrate:
--> 356             activities = self.hydrate_activities(activities)
    357         return activities
    358

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in hydrate_activities(self, activities)
    332         activity_data = {a.serialization_id: a for a in activity_list}
    333         print activity_data
--> 334         return [activity.get_hydrated(activity_data) for activity in activities]
    335
    336     def needs_hydration(self, activities):

/Users/home/venv/lib/python2.7/site-packages/stream_framework/activity.pyc in get_hydrated(self, activities)
     42
     43         '''
---> 44         activity = activities[int(self.serialization_id)]
     45         activity.dehydrated = False
     46         return activity

KeyError: 14929294667170000000001005L

我可以打印出[&lt;stream_framework.activity.DehydratedActivity object at 0x10e114e90&gt;][u'14929294667170000000001005']

有什么可能导致这种情况的线索吗?

【问题讨论】:

    标签: python stream-framework


    【解决方案1】:

    这里的类型不匹配,在 KeyError 堆栈跟踪中显示的 Key 和 [u'14929294667170000000001005'] 的打印表示之间

    u'14929294667170000000001005' 是一个 unicode 字符串 而14929294667170000000001005Llong 类型的整数。

    无论是键本身还是您尝试用作查找键的值都必须更改,以便类型相同。请注意,带或不带 L 后缀(表示 long 类型)的 int 将用于从 python dict 检索值。一个简单的演示:

    >>> D = {14929294667170000000001005 : 'some value'}
    >>> D[14929294667170000000001005]
    'some value'
    >>> D[14929294667170000000001005L]
    'some value'
    

    【讨论】:

    • 我知道这一点,但我正在使用一个框架,所以问题是为什么它不能在框架的范围内工作
    • 啊,我明白了。 2014 年 1 月 13 日“tbarbugli”在此线程中的底部回复:github.com/tschellenbach/Stream-Framework/issues/15 ... 提到需要insert_activity() 来防止同样的错误。
    • 这似乎是问题所在,文档似乎缺少此要求
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多