2013-12-22 3 views
6

Я использую следующий код, чтобы получить объект на основе urlsafe key данного:Как правильно обрабатывать неправильный ключ urlsafe?

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

Но в случае, если нет такого юридического лица с данным ключом urlsafe, он вернется ProtocolBufferDecodeError: Unable to merge from string на первую линию, когда я ожидал бы q равным None. Есть ли другой правильный способ справиться с таким случаем, за исключением исключения ProtocolBufferDecodeError?

+0

ловить 'ProtocolBufferDecodeError' и возвращать Нет кажется мне хорошим. –

+0

@ DanCornilescu, этот вопрос задавался раньше в 2015 году (когда мой вопрос с 2013 года), ooook :) –

ответ

0

Вы можете попробовать это

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

Для устранения этой проблемы ...

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

Я немного озадачен, почему это не является более распространенной жалобой все же. Разве никто не проверяет свои URL-адреса с помощью недействительных ключей?

+0

Все еще ничего для этого? Сегодня я писал тесты и ударил это. В моем случае предыдущие проекты App Engine не использовали ключ urlsafe, поэтому я никогда не ударил его ранее. Тем не менее, это странно, что нет лучшего способа справиться с этим. –

Смежные вопросы