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

LA_*_*LA_ 6 python google-app-engine exception app-engine-ndb

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

q_key = ndb.Key(urlsafe=key)
q = q_key.get()
return q
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*Mee 7

这里有一个开放的bug报告

解决方法是......

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

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


Oma*_*hir 0

你可以试试这个

try:
    q_key = ndb.Key(urlsafe=key)
    q = q_key.get()
except ProtocolBufferDecodeError:    
    q = None
return q
Run Code Online (Sandbox Code Playgroud)