如何正确处理提供的错误urlsafe密钥?

时间:2013-12-22 17:10:42

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

我使用以下代码根据urlsafe key获取实体:

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

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

2 个答案:

答案 0 :(得分:7)

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

我有点疑惑为什么这不是一个更常见的抱怨。没有人用无效密钥测试他们的网址吗?

答案 1 :(得分:0)

你可以试试这个

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