s = set('ABC')
s.add('z')
s.update('BCD')
s.remove('DEF') # error here
s -= set('DEFG')
Répondre
Comme d'autres l'ont souligné, 'DEF'
, membre de l'ensemble que vous essayez de supprimer, est pas membre l'ensemble, et remove
, par the docs, est spécifié comme « Soulève KeyError si élém ne figure pas dans l'ensemble. ».
Si vous voulez « manque élément » pour signifier non = op silencieuse à la place, il suffit d'utiliser discard au lieu de remove
: c'est la différence cruciale entre les méthodes de discard
et remove
ensembles, et la raison même, ils doivent tous deux exister!
L'argument de set.remove()
doit être membre de jeu.
'DEF'
n'est pas un membre de votre ensemble. 'D'
est.
De http://docs.python.org/library/stdtypes.html:
remove(elem)
Remove element elem from the set. Raises KeyError if elem is not contained in the set.
'DEF' est pas dans le jeu
vous attendez-vous 'DEF'
à traiter comme un élément ou un mis?
Dans ce dernier cas, utilisez s.difference_update('DEF')
.
Peu importe la façon dont il les veut à traiter, le problème est que « EF » n'existent pas dans le jeu, d'où le message d'erreur. –
Désaccordé. "Vous appelez la mauvaise méthode pour cet argument" est également une réponse valable à la question. Étant donné que l'auteur utilise des chaînes comme ensembles, il est valide de supposer qu'il a besoin de 'difference_update()' ici. –
@ zjm1126: s'il vous plaît inclure retraçage prochaine fois. – bernie
je suis désolé, quelle est la 'traceback' ??? – zjm1126
>>> s.remove ('DEF') 'retraçage (appel le plus récent en dernier): Fichier "", ligne 1, dans KeyError: « DEF'' –
bernie