suppose, j'ai un dictionnaire: et mon code est comme: p> Ceci renvoie un y a-t-il quelque chose comme: p> une méthode comme celle-ci est expliquée ici https://realpython.com/python -keyerror/ . J'ai essayé. Mais il soulève toujours un KeyError < /code >.
sur le myList.get (4, "quelque chose") code>. Mais je cherche quelque chose d'autre. P> keillerror code> lorsque myList [4] code> n'existe pas. Quelqu'un peut-il m'aider à trouver ce que je manque ici? P> essayez ... sauf code> la méthode n'est pas appropriée pour moi. Cela rend mon code long et plus lent. P> p>
4 Réponses :
Vous pouvez obtenir une liste des clés d'un dictionnaire avec en fonction de ce que vous faites, Vous êtes peut-être également intéressé de savoir que vous pouvez avoir la longueur d'un dictionnaire à l'aide de Je pense que vous devez renommer Enfin, essayez d'éviter d'utiliser myList.keys () code>, vous pouvez donc le faire: len (myList) code>, donc ce que vous faites (avec incrémentation des touches commençant par 1 code>). également être fait plus génériquement comme celui-ci: p> myList code> à myDICT code>. Ce n'est pas une liste. C'est un "dictionnaire", a.k.a. a dict code>. P> Essayer, sauf les blocs code> où vous pouvez. Si vous allez utiliser essayer, sauf code>, il est préférable d'attraper une erreur particulière (comme KeyError code> comme vous l'avez mentionné). Pour voir la bonne façon d'attraper un KeyError, voir la réponse par @ Jeanpierre-Fisher (édité utilement par @ Ann-Zen). P> P>
Génial! Je devrais y penser plus tôt. Merci beaucoup. Marqué votre réponse comme solution. Mais pouvez-vous expliquer, qu'est-ce qui ne va pas avec si KeyError dans MyList [4]: code>? Je suis préoccupé par la mylist / MyDICT. Merci quand même.
Lorsque vous dites "keillerror" dans myList [4] code>, le premier "interprète" de Python va évaluer myList [4] code>, qui "soulève" une exception KeyError . Étant donné que cette exception est soulevée, le code s'arrête. Il ne vérifiera pas si "KeyError" est une clé du dictionnaire (qui est ce que ce code fait). Pour voir la bonne façon d'attraper un KeyError, voir la réponse par @ Jeanpierre-Fisher (édité serviblement par @ Ann-Zen).
Vous pouvez l'envelopper dans une déclaration d'essai et traiter l'erreur:
Vous pouvez l'attraper à l'aide d'un essai à l'exception du bloc:
myList = {1:'one', 2:'two', 3:'three'}
try:
last = myList[len(myList)]
except KeyError as e:
print('KeyError: ', e)
Le moyen sûr le plus simple, si vous ne voulez pas utiliser, essayez à l'exception du bloc (qui est recommandé la meilleure pratique) consiste à simplement utiliser ceci:
last = myList[len(myList)]
Ceci est une sous-section exacte de ma réponse
J'ai écrit cela il y a 34 minutes et vous avez dupliqué le mien il y a 8 minutes. Regardez ci-dessus C'était dans ma première réponse il y a 34 minutes
Oh tu as raison. Je m'excuse. Excuses sincères. Je n'ai pas intentionnellement dupliquer votre réponse. Nous avons indépendamment écrit exactement la même ligne de code. Je vais annuler mon bowvote.
Pas de soucis. Nous sommes que vous pouvez supprimer le bowvote? Merci JP
Désolé, je pensais que je l'ai fait mais il semble que je ne peux pas annuler le vote. Pour ce faire, j'ai voté 2 autres bonnes réponses que vous avez sur d'autres questions.
Est-ce que cela répond à votre question? Erreur de clé de manutention dans Python
Je vais aller pour un bowvote pour ces commentaires: l'essai ... Sauf méthode n'est pas approprié pour moi. Cela rend mon code long et plus lent i> et mais je cherche quelque chose d'autre i>. Je ne comprends pas ce que vous voulez et sur quelle base vous refusez les 5 réponses que vous avez données.
@Nicolasgervais Vous n'avez vraiment pas compris, c'est pourquoi vous n'avez pas réalisé pourquoi je n'ai pas accepté ces réponses. Voir, la réponse que j'ai marquée (pour votre objectif d'apprentissage). En passant, la collecte de la réputation sur Stackoverflow n'est pas ma vision.