Tôi có một cuốn từ điển mà đôi khi nhận được cuộc gọi cho các phím không tồn tại, vì vậy tôi cố gắng và sử dụng hasattr
và getattr
để xử lý các trường hợp:hasattr của Python trên danh sách các giá trị của từ điển luôn luôn trả về false?
key_string = 'foo'
print "current info:", info
print hasattr(info, key_string)
print getattr(info, key_string, [])
if hasattr(info, key_string):
array = getattr(info, key_string, [])
array.append(integer)
info[key_string] = array
print "current info:", info
Lần đầu tiên này chạy với integer = 1
:
current info: {}
False
[]
current info: {'foo': [1]}
Chạy lại mã này bằng integer = 2
:
instance.add_to_info("foo", 2)
current info: {'foo': [1]}
False
[]
current info: {'foo': [2]}
Lần chạy đầu tiên rõ ràng là thành công ({'foo': [1]}
), nhưng hasattr
trả về false và getattr
sử dụng mảng trống mặc định lần thứ hai xung quanh, mất giá trị 1
trong quá trình! Tại sao điều này?
Tôi sẽ chết tiệt! Tôi nghĩ tôi đã phát điên. Tôi đã luôn sử dụng cấu trúc 'if/in/else' cho các tình huống kiểm tra từ điển này với các giá trị mặc định. Lần này kể từ khi tình hình thực tế thực sự phức tạp hơn nhiều so với ví dụ của tôi, với một vài hasattrs khác bay xung quanh, tôi ủng hộ rằng "cú pháp" thay vào đó ... mà rõ ràng là không hoạt động! Tôi sẽ nhớ điều này từ bây giờ, cảm ơn! –
Ngoài ra, tôi đang xử lý thông tin trong init một cách thích hợp, chỉ muốn hợp lý hóa ví dụ. –