【问题标题】:How to properly handle wrong urlsafe key provided? [duplicate]如何正确处理提供的错误 urlsafe 密钥? [复制]
【发布时间】:2013-12-22 17:10:41
【问题描述】:

我使用以下代码获取基于 urlsafe key 给定的实体:

q_key = ndb.Key(urlsafe=key)
q = q_key.get()
return q

但是如果没有给定 urlsafe 键的实体,它会返回 ProtocolBufferDecodeError: Unable to merge from string 在第一行,我希望 q 等于 None。除了捕获ProtocolBufferDecodeError 异常之外,还有其他正确的方法来处理这种情况吗?

【问题讨论】:

  • 捕获 ProtocolBufferDecodeError 并返回 None 对我来说似乎很好。
  • @DanCornilescu,这个问题在 2015 年之前已经被问过(当我的问题是 2013 年时),ooook :)

标签: python google-app-engine exception app-engine-ndb


【解决方案1】:

There is an open bug report for it here

解决方法是……

from google.net.proto.ProtocolBuffer import ProtocolBufferDecodeError
try:
   q_key = ndb.Key(urlsafe=key)
   q = q_key.get()
except ProtocolBufferDecodeError:    
   q = None
return q

我有点困惑,为什么这还不是更常见的投诉。没有人用无效的键测试他们的网址吗?

【讨论】:

  • 还是没有这个?我今天正在编写测试并点击了这个。在我的情况下,以前的 App Engine 项目没有使用 urlsafe 密钥,所以这就是我以前从未点击过它的原因。仍然有点奇怪,没有更好的方法来处理这个问题。
【解决方案2】:

你可以试试这个

try:
    q_key = ndb.Key(urlsafe=key)
    q = q_key.get()
except ProtocolBufferDecodeError:    
    q = None
return q

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 2014-09-02
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多