2017-09-29 2 views
0

Je le code suivant:AttributeError: objet 'set' n'a pas d'attribut 'b'

N1 = int(input()) 
a = set(list(map(int, input().split()))) 
N2 = int(input()) 
for i in range(N2): 
    b = input().split() 
    c = set(list(map(int, input().split()))) 
    a.b[0](c) 
print(sum(a)) 

Avec entrée typique, la liste b ressemble à ceci:

b = ['intersection_update', '10'] 

Quelle est la question avec a.b[0](c)? Apparemment, je ne l'évalue pas correctement.

Le concept semble bien, mais il semble que l'ensemble a ne peut pas prendre un attribut qui est en fait un élément d'une liste.

ce que je veux évaluer est:

a.intersection_update(c) 

est ici l'erreur que je reçois:

Traceback (most recent call last): 
    File "solution.py", line 7, in 
    a.b[0](c) 
AttributeError: 'set' object has no attribute 'b' 

Répondre

1

Vous ne pouvez pas effectuer ce type d'accès indirect à l'aide de l'opérateur point dans Python. Utilisez getattr() à la place:

>>> a = {1, 2, 3, 4, 5} 
>>> c = {3, 4, 5, 6, 7} 
>>> b = ['intersection_update', '10'] 
>>> getattr(a, b[0])(c) 
>>> a 
{3, 4, 5} 
+1

merci, cela a fonctionné. J'ai appris quelque chose de nouveau aujourd'hui :) – hky404

1

Je pense que vous voulez utiliser getattr, pour obtenir un attribut qui est le nom stocké sous forme de chaîne Une autre variable:

getattr(a, b[0])(c) 

Votre code recherche un attribut nommé b sur l'ensemble a.