2015-08-20 24 views
6

Tôi rất mới với python và đã cố gắng dạy bản thân mình khi tôi đi (không phải là phương pháp tốt nhất sâu vào python nhưng vì lợi ích của thời gian tôi cũng cần). Các mô-đun tôi đã nhập là Tkinter và csv. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào,AttributeError: đối tượng 'set' không có thuộc tính 'items'

Vì lợi ích ngắn gọn, tôi sẽ không đăng toàn bộ mã của tôi ở đây nhưng tôi sẽ bao gồm toàn bộ lỗi và cho biết dòng lỗi đang áp dụng. Mọi thứ dưới đây đều nằm trong một lớp được gọi là MainApp.

def SubmitEdit(self): 
    self.key="" 
    self.val="" 
    new_rows = [] 
    self.changes = {self.key:self.val} 
    with open("info.csv",'rb') as f: 
     reader = csv.reader(f): 
     for row in reader: 
      new_row = row 
      for field in row: 
       if field == "NAME": 
        print "groovy" 
      for (self.key,self.val) in self.changes.items(): 
       new_row = [ x.replace(self.key,self.val) for x in new_row] 
      new_rows.append(new_row) 
    with open("info.csv","wb") as f: 
     writer = csv.writer(f): 
     writer.writerows(new_rows) 

tôi đã viết mã này ra riêng để chắc chắn rằng nó đã làm việc trước khi đưa nó vào chương trình và nó làm việc một cách hoàn hảo, nhưng khi tôi đặt nó trong lớp và thực hiện các thay đổi (tôi nghĩ) Tôi cần thực hiện để các dòng mã/biến nó không hoạt động. Vì vậy, điều đó khiến tôi tin rằng tôi đang sửa chữa một cái gì đó không chính xác.

Dưới đây là lỗi:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python27\lib\lib-tk\Tkinter.py",line 1536, in__call__ 
     return self.func(*args) 
    File "C:\Python27\draft.py", line 328, in SubmitEdit 
     for (self.key,self,val) in self.changes: 
AttributeError: 'set' object has no attribute 'items' 

đâu dòng 328 đề cập đến dòng: "hoặc (self.key, self.val) trong self.changes.items():"

Tôi đã thay đổi xung quanh (tôi cảm thấy như) sự hiện diện hay vắng mặt của "bản ngã". cho tất cả các biến nhưng tôi không thể làm cho nó hoạt động.

EDIT: tôi thay đổi mã để trông như thế này:

def SubmitEdit(self): 
    new_rows = [] 
    self.changes = {"MTMA",123} 
    with open("info.csv",'rb') as f: 
     reader = csv.reader(f): 
     for row in reader: 
      new_row = row 
      for field in row: 
       if field == "NAME": 
        print "groovy" 
      for (key,val) in self.changes.items(): 
       new_row = [ x.replace(key,val) for x in new_row] 
      new_rows.append(new_row) 
    with open("info.csv","wb") as f: 
     writer = csv.writer(f): 
     writer.writerows(new_rows) 

theo ý kiến, nhưng vẫn nhận được lỗi chính xác tương tự.

+0

Vâng lỗi tự nó được nói rằng không có thuộc tính được gọi là 'mục() '. Vì vậy, hãy thử và xóa '.items()' khỏi 'self.changes.items()' http://docs.python.org/3/library/stdtypes.html#dictionary-view-objects Ngoài ra, tại sao bạn do 'self.changes = {self.key: self.val}'? Nếu bạn chỉ đang cố gắng tham khảo một từ điển, việc thêm 'self.key: self.val' là không cần thiết vì' self.changes = {} 'là đủ. – awbemauler

+0

Khi tôi lấy đi .items() nó trả về một ValueError có nội dung "cần nhiều hơn 0 giá trị để giải nén". Tôi sẽ cố gắng để trống từ điển. – MTMA

+0

Có, bởi vì bạn không có gì trong khóa và giá trị của bạn. Bạn đã khởi xướng những biến đó không có gì. – awbemauler

Trả lời

12

Như bạn có thể nhìn thấy từ mới nhất mã cập nhật -

self.changes = {"MTMA",123} 

Khi bạn xác định self.changes như trên, bạn đang thực sự xác định một tập, không phải là một từ điển, kể từ khi bạn sử dụng '' (dấu phẩy) thay vì dấu hai chấm, tôi khá chắc chắn trong mã thực sự của bạn, bạn đang sử dụng dấu phẩy, chứ không phải dấu hai chấm.

Để xác định một từ điển với "MTMA" như chìa khóa và 123 là giá trị, sử dụng dấu hai chấm ở giữa chúng, ví dụ -

self.changes = {"MTMA":123} 

Làm tương tự trong mã thực tế của bạn là tốt.

Nếu những gì bạn muốn là một từ điển rỗng, định nghĩa nó như -

self.changes = {} 
+0

Ahhhhh. Vì vậy, rõ ràng bây giờ. Thật là xấu hổ ... Cảm ơn sự giúp đỡ của bạn! – MTMA

Các vấn đề liên quan