Salut tout le monde. J'utilise Appengine/Python et je n'ai pas été en mesure de corriger un bug BadKeyError pendant les 5 dernières heures Je me demande si quelqu'un peut m'aider à le comprendre. La partie de l'application à l'origine du bogue est un contrôleur qui traite les votes effectués par les utilisateurs. Actor_id est la clé de l'utilisateur et object_id est la clé de l'objet en cours de vote .Comment puis-je corriger ce bug? BadKeyError: Le nom doit être le type de chaîne
J'ai testé l'application en se cachant et restaurer un peu de code, et je sais pour sûr que les clés étant reçues sont bonnes (premier bloc), et que les entités sont créées (deuxième bloc). Ce qui ne fonctionne pas est la création d'une instance d'activité - soulève BadKeyError (troisième bloc)
J'ai ajouté le code du contrôleur, le code du modèle et le retraçage de l'erreur de la page du journal.
# Controller Code
class ActivityHandler(FacebookEnabled):
def get(self):
# i.e. fbid/headline id/upvote. This works
actor_id = self.request.get('actor_id')
object_id = self.request.get('object_id')
# creating actor and object from keys (actor_id and object_id).
# This works.
actor = models.Person.get(actor_id)
object = models.Headline.get(object_id)
logging.info("Actor " + str(actor) +": " + str(actor.name) +
" object " + str(object) + ": " + str(object.title))
# THIS IS WHAT SEEMS TO RAISE AN EXCEPTION
activity = models.Activity(actor, object, action='upvote')
activity.put()
# Model Code
class Activity(polymodel.PolyModel):
# User causing the action i.e. a person
actor = db.ReferenceProperty(Person, required=True,
collection_name='actors')
# The object being the subject of the action i.e. headline
object = db.ReferenceProperty(Headline, required=True,
collection_name='objects')
# The action being made
action = db.StringProperty(required=True, choices=['upvote','downvote'],
default='upvote')
Traceback
Name must be string type, not Headline
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/
ext/webapp/__init__.py", line 511, in __call__
handler.get(*groups)
File "/base/data/home/apps/libnentest/2.343063076026692316/main.py",
line 125, in get
activity = models.Activity(actor, object, action='upvote')
File "/base/python_runtime/python_lib/versions/1/google/appengine/
ext/db/__init__.py", line 726, in __init__
key_name.__class__.__name__)
BadKeyError: Name must be string type, not Headline
Dans cet exemple, ActivityHandler et Activity apparaissent dans un fichier et une activité non spécifiés dans un module appelé 'models.py'. Il est important de faire cette distinction en particulier lors de la publication de NameErrors. – msw