2010-01-03 4 views
1
s = set('ABC') 
s.add('z') 
s.update('BCD') 
s.remove('DEF') # error here 
s -= set('DEFG') 
+1

@ zjm1126: s'il vous plaît inclure retraçage prochaine fois. – bernie

+0

je suis désolé, quelle est la 'traceback' ??? – zjm1126

+0

>>> s.remove ('DEF') 'retraçage (appel le plus récent en dernier): Fichier "", ligne 1, dans KeyError: « DEF'' – bernie

Répondre

12

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!

2

L'argument de set.remove() doit être membre de jeu.

'DEF' n'est pas un membre de votre ensemble. 'D' est.

0

vous attendez-vous 'DEF' à traiter comme un élément ou un mis?

Dans ce dernier cas, utilisez s.difference_update('DEF').

+0

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. –

+0

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. –

Questions connexes