2013-12-22 7 views
6

Ich verwende den folgenden Code Einheit basierend auf urlsafe key gegeben zu bekommen:Wie wird der falsche urlsafe-Schlüssel richtig gehandhabt?

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

Aber falls es mit bestimmten urlsafe Schlüsseln keine solche Person ist, es ProtocolBufferDecodeError: Unable to merge from string in der ersten Zeile zurückkehren, wenn ich q erwarten gleich None sein. Gibt es einen anderen richtigen Weg, um einen solchen Fall zu behandeln, außer dass man die Ausnahme ProtocolBufferDecodeError einholt?

+0

fangen 'ProtocolBufferDecodeError' und Rückgabe keine scheint für mich in Ordnung. –

+0

@DanCornilescu, diese Frage wurde zuvor im Jahr 2015 gestellt (wenn meine Frage ab 2013), oook :) –

Antwort

0

können Sie versuchen, diese

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

There is an open bug report for it here

dieses Problem umgehen, ...

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

Ich bin ein wenig verwirrt, warum dies ist nicht eine gemeinsame Beschwerde noch. Prüft niemand ihre URLs mit ungültigen Schlüsseln?

+0

Immer noch nichts dafür? Ich habe heute Tests geschrieben und diese getroffen. In meinem Fall verwendeten frühere App Engine-Projekte keinen urlsafe-Schlüssel, weshalb ich ihn nie zuvor getroffen habe. Trotzdem ist es merkwürdig, dass es keinen besseren Weg gibt, damit umzugehen. –