# Bắt đầu. giá trị = {"mèo". 1, "cuốn sách". 2} # Không có từ python trong từ điển. print[values["python"]]Traceback [lần gọi gần đây nhất]. Tập tin "C. \chương trình\chương trình. py", dòng 8, inprint[values["python"]] KeyError. 'con trăn'
Ngoại lệ Key Error trong Python là một ngoại lệ mà hầu hết các lập trình viên đều gặp phải, đặc biệt là khi họ bắt đầu làm quen với từ điển Python
Trong bài này bạn sẽ học
- Lỗi khóa có nghĩa là gì trong Python
- Cách sửa lỗi key trong Python
- Cách xử lý lỗi phím
Mục lục
- Lỗi phím nghĩa là gì?
- Làm cách nào để sửa các lỗi chính trong Python?
- Làm thế nào để bạn xử lý các lỗi quan trọng?
- Tránh KeyError bằng vòng lặp For
- Cách tiếp cận chung cho các ngoại lệ
- Phần kết luận
Lỗi phím nghĩa là gì?
Lỗi khóa là một cách để Python cho bạn biết rằng bạn đang cố truy cập một khóa không tồn tại trong từ điển
Đây là một ví dụ, tôi tạo một tệp có tên là keyerror. py…
Tôi định nghĩa một từ điển chứa các quốc gia và thủ đô của họ
Đầu tiên tôi in thủ đô của Ý…
…sau đó tôi in thủ đô của Pháp
countries = {'Italy': 'Rome', 'Poland': 'Warsaw', 'UK': 'London'}
print[countries['Italy']]
print[countries['France']]
Và đây là những gì tôi nhận được khi chạy nó
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
Như bạn có thể thấy giá trị liên quan đến khóa đầu tiên của từ điển [Ý] được in như chúng ta muốn
Nhưng có điều gì đó xảy ra với câu lệnh in thứ hai
Một KeyError xuất hiện trong đầu ra và đó là vì…
Python phát sinh lỗi KeyError khi bạn cố truy cập một khóa không tồn tại trong từ điển
Trong trường hợp này, từ khóa 'Pháp' không tồn tại trong từ điển các quốc gia
Cũng lưu ý cách Python có thể cho biết ngoại lệ đã xảy ra ở dòng mã nào. Điều này rất hữu ích để tìm ra nguyên nhân lỗi một cách nhanh chóng khi bạn có hàng trăm hoặc hàng nghìn dòng mã.
Core skill: When Python raises an exception a traceback is included. A traceback is used to give you all the details you need to understand the type of exception and to find what has caused it in your code.
Có ý nghĩa?
Làm cách nào để sửa các lỗi chính trong Python?
Có 2 cách sửa lỗi key rất cơ bản nếu chương trình của bạn đơn giản
- Tránh tham chiếu khóa không tồn tại trong từ điển. điều này có thể hợp lý nếu, ví dụ, giá trị của khóa đã bị viết sai chính tả. Nó không áp dụng cho trường hợp cụ thể này
- Thêm khóa còn thiếu vào từ điển. trong trường hợp này, chúng tôi sẽ thêm 'Pháp' làm chìa khóa cho từ điển như một phần của định nghĩa ban đầu
Nhưng đó không phải là những cách tiếp cận mạnh mẽ và không ngăn được lỗi tương tự xảy ra lần nữa trong tương lai
Thay vào đó, hãy xem xét hai lựa chọn khác…
Lựa chọn đầu tiên
Yêu cầu Python không trả về KeyError nếu chúng tôi cố gắng truy cập một khóa không tồn tại trong từ điển mà thay vào đó trả về một giá trị mặc định
Giả sử chúng ta muốn trả về giá trị mặc định 'Không xác định' cho bất kỳ khóa nào không có trong từ điển…
Đây là cách chúng ta có thể làm điều đó bằng cách sử dụng phương thức get[] từ điển
countries = {'Italy': 'Rome', 'Poland': 'Warsaw', 'UK': 'London'}
default = 'Unknown'
print[countries.get['Italy', default]]
print[countries.get['France', default]]
Và đầu ra trở thành
Rome
Unknown
Vì vậy, ít nhất theo cách này, chúng tôi có nhiều quyền kiểm soát hơn đối với cách chương trình của chúng tôi chạy
Sự lựa chọn thứ hai
Xác minh xem một khóa có tồn tại trong từ điển hay không bằng cách sử dụng toán tử in trả về giá trị boolean [Đúng hoặc Sai] dựa trên sự tồn tại của khóa đó trong từ điển
Trong ví dụ bên dưới, tôi sử dụng toán tử in cùng với câu lệnh if else Python để xác minh xem một khóa có tồn tại hay không trước khi truy cập giá trị của nó
countries = {'Italy': 'Rome', 'Poland': 'Warsaw', 'UK': 'London'}
if 'France' in countries:
print["The capital of France is %" % countries['France']]
else:
print["The capital of France is unknown"]
Khi tôi chạy nó, tôi thấy…
The capital of France is unknown
Đây cũng là một lựa chọn tốt
Làm thế nào để bạn xử lý các lỗi quan trọng?
Trong phần trước, tôi đã giới thiệu phương thức get[] trong từ điển như một cách để trả về một giá trị mặc định nếu một khóa không tồn tại trong từ điển của chúng ta
Nhưng, điều gì sẽ xảy ra nếu chúng ta không chuyển giá trị mặc định làm đối số thứ hai cho phương thức get[]?
Hãy thử xem, việc làm quen với các phương thức tích hợp sẽ tạo ra sự khác biệt lớn khi bạn viết mã
countries = {'Italy': 'Rome', 'Poland': 'Warsaw', 'UK': 'London'}
print[countries.get['Italy']]
print[countries.get['France']]
Bạn có biết đầu ra là gì không?
________số 8Điều thú vị là lần này Python không đưa ra ngoại lệ KeyError…
…phương thức get[] chỉ trả về Không có nếu khóa không tồn tại trong từ điển
Điều này có nghĩa là chúng ta có thể triển khai logic có điều kiện trong mã của mình dựa trên giá trị được trả về bởi phương thức get[]. Đây là một ví dụ
countries = {'Italy': 'Rome', 'Poland': 'Warsaw', 'UK': 'London'}
capital = countries.get['France']
if capital:
print["The capital is %s" % capital]
else:
print["The capital is unknown"]
đầu ra là
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
0Một cách hay để tránh ngoại lệ xấu xí đó 🙂
Tránh KeyError bằng vòng lặp For
Thông thường, một cách để xử lý lỗi là sử dụng các cấu trúc lập trình ngăn các lỗi đó xảy ra
Tôi đã đề cập trước đó rằng Lỗi Key xảy ra khi bạn cố gắng truy cập một khóa không tồn tại trong từ điển
Vì vậy, một cách để ngăn KeyError là đảm bảo rằng bạn chỉ truy cập các khóa tồn tại trong từ điển
Được rồi, nhưng bằng cách nào?
Bạn có thể sử dụng vòng lặp for đi qua tất cả các khóa của từ điển…
Điều này sẽ đảm bảo rằng chỉ những khóa có trong từ điển mới được sử dụng trong mã của chúng tôi
Hãy xem xét một ví dụ
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
1Và đầu ra là…
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
2Vòng lặp for có thể được sử dụng để duyệt qua tất cả các khóa trong từ điển và để đảm bảo bạn không truy cập các khóa không thuộc từ điển. Điều này ngăn không cho ngoại lệ Python KeyError xảy ra
Cách tiếp cận chung cho các ngoại lệ
Cuối cùng, một cách tiếp cận chung mà bạn có thể sử dụng với bất kỳ trường hợp ngoại lệ nào là khối thử ngoại trừ
Điều này sẽ ngăn Python tăng ngoại lệ KeyError và nó sẽ cho phép bạn xử lý ngoại lệ trong khối except
Đây là cách bạn có thể làm điều đó trong ví dụ của chúng tôi
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
3Như bạn có thể thấy, trong trường hợp này, khối except được viết riêng để xử lý ngoại lệ KeyError
Trong trường hợp này, chúng ta cũng có thể sử dụng một ngoại lệ chung [xóa KeyError]…
Rome
Traceback [most recent call last]:
File "keyerror.py", line 3, in
print[countries['France']]
KeyError: 'France'
4Vì vậy, chúng ta có thực sự cần chỉ định loại ngoại lệ không?
Sẽ rất hữu ích nếu khối mã thử có thể đưa ra nhiều loại ngoại lệ và chúng tôi muốn xử lý từng loại khác nhau
Phần kết luận
Bây giờ bạn đã có một ý tưởng khá hay về cách xử lý ngoại lệ KeyError trong Python
Có rất ít tùy chọn dành cho bạn, hãy chọn tùy chọn bạn thích…
Bạn sẽ sử dụng phương thức get[] hay toán tử in?
Bạn có thích cách tiếp cận thử ngoại trừ không?
Hãy cho tôi biết trong phần bình luận bên dưới 🙂
Bạn đang bắt đầu với Python?
Tôi đã tạo một danh sách kiểm tra để bạn nhanh chóng tìm hiểu những kiến thức cơ bản về Python. Bạn có thể tải về miễn phí tại đây
Bài viết liên quan
Độ lệch chuẩn của gấu trúc. Phân tích dữ liệu của bạn với Python
Tìm kiếm video Youtube bằng Python với 6 dòng mã
Cách viết danh sách vào tệp bằng Python [Có ví dụ]
Claudio Sabato
Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng