Trong chương trình python của tôi, tôi nhận được lỗi này:
KeyError: 'variablename'
Từ mã này:
path = meta_entry['path'].strip('/'),
Bất cứ ai có thể giải thích tại sao điều này đang xảy ra?
meta_entry
và đảm bảo khóa bạn muốn tồn tại.
Trong chương trình python của tôi, tôi nhận được lỗi này:
KeyError: 'variablename'
Từ mã này:
path = meta_entry['path'].strip('/'),
Bất cứ ai có thể giải thích tại sao điều này đang xảy ra?
meta_entry
và đảm bảo khóa bạn muốn tồn tại.
Câu trả lời:
Một KeyError
thường có nghĩa là chìa khóa không tồn tại. Vì vậy, bạn có chắc chắn path
chìa khóa tồn tại?
Từ các tài liệu python chính thức:
ngoại lệ KeyError
Tăng lên khi không tìm thấy khóa ánh xạ (từ điển) trong bộ khóa hiện có.
Ví dụ:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
Vì vậy, hãy thử in nội dung meta_entry
và kiểm tra xem có path
tồn tại hay không.
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Hoặc, bạn có thể làm:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
path = meta_entry['path'].strip('/'),
là một phần của mã của bạn hoặc công cụ. Nếu nó là một phần của động cơ, tôi sợ không có gì có thể được thực hiện.
print meta_entry
và kiểm tra xem nó có chứa path
hay không.
Tôi hoàn toàn đồng ý với các ý kiến lỗi chính. Bạn cũng có thể sử dụng phương thức get () của từ điển để tránh các ngoại lệ. Điều này cũng có thể được sử dụng để đưa ra một đường dẫn mặc định chứ không phải None
như hiển thị bên dưới.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Có, rất có thể là do khóa không tồn tại.
Trong chương trình của tôi, tôi đã sử dụng setdefault để tắt tiếng lỗi này, vì lo ngại về hiệu quả. tùy thuộc vào mức độ hiệu quả của dòng này
>>>'a' in mydict.keys()
Tôi cũng mới biết về Python. Trong thực tế tôi vừa học nó ngày hôm nay. Vì vậy, tha thứ cho tôi về sự thiếu hiểu biết về hiệu quả.
Trong Python 3, bạn cũng có thể sử dụng chức năng này,
get(key[, default]) [function doc][1]
Người ta nói rằng nó sẽ không bao giờ đưa ra một lỗi chính.
Điều này có nghĩa là mảng của bạn thiếu khóa bạn đang tìm kiếm. Tôi xử lý điều này với một hàm trả về giá trị nếu nó tồn tại hoặc thay vào đó nó trả về một giá trị mặc định.
def keyCheck(key, arr, default):
if key in arr.keys():
return arr[key]
else:
return default
myarray = {'key1':1, 'key2':2}
print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')
Đầu ra:
1
2
#default
Tôi đã nhận được lỗi này khi tôi phân tích cú pháp dict
với lồng nhau for
:
cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
for attr in cat:
print(cats[cat][attr])
Tìm lại:
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: 'K'
Bởi vì trong vòng lặp thứ hai nên cats[cat]
thay vào đó cat
(chỉ là một khóa)
Vì thế:
cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
for attr in cats[cat]:
print(cats[cat][attr])
Tặng
black
10
white
8
Ví dụ: nếu đây là một số:
ouloulou={
1:US,
2:BR,
3:FR
}
ouloulou[1]()
Nó hoạt động hoàn hảo, nhưng nếu bạn sử dụng ví dụ:
ouloulou[input("select 1 2 or 3"]()
nó không hoạt động, bởi vì chuỗi trả về đầu vào của bạn '1'. Vì vậy, bạn cần sử dụng int ()
ouloulou[int(input("select 1 2 or 3"))]()
Hãy để chúng tôi làm cho nó đơn giản nếu bạn đang sử dụng Python 3
mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
print('c key is present')
Nếu bạn cần điều kiện khác
mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
print('key present')
else:
print('key not found')
Đối với giá trị khóa động, bạn cũng có thể xử lý thông qua khối ngoại lệ thử
mydict = {'a':'apple','b':'boy','c':'cat'}
try:
print(mydict['c'])
except KeyError:
print('key value not found')mydict = {'a':'apple','b':'boy','c':'cat'}
Key error
nói chung có nghĩa làkey
không tồn tại. Vì vậy, bạn có chắc chắn 'con đường' tồn tại.?