Lỗi khóa Python xuất hiện khi bạn cố gắng truy cập một mục trong từ điển không tồn tại. Bạn có thể sửa lỗi này bằng cách sửa đổi chương trình của mình để chọn một mục từ từ điển tồn tại. Hoặc bạn có thể xử lý lỗi này bằng cách kiểm tra xem có khóa nào trước không.
Cách xử lý lỗi khóa Python
Bạn vừa được chào đón bởi một KeyError? Đừng lo lắng! Khi một KeyError xuất hiện, điều đó có nghĩa là bạn đang cố gắng truy cập vào một khóa bên trong từ điển không tồn tại. Xử lý và sửa lỗi này rất dễ dàng khi bạn biết cách.
KeyErrors có thể được xử lý bằng cách sử dụng thử… ngoại trừ khối, sử dụng từ khóa “in” hoặc bằng cách kiểm tra trước khóa bằng cách sử dụng lập chỉ mục.
Trong hướng dẫn này, chúng ta sẽ nói về Python KeyErrors là gì và tại sao chúng được phát triển. Chúng tôi sẽ giới thiệu cho các bạn một ví dụ về lỗi và cách khắc phục lỗi để bạn biết cách giải quyết các lỗi KeyErrors trong tương lai.
Hãy bắt đầu!
Python KeyError là gì?
Lỗi khóa Python xảy ra khi bạn cố gắng truy cập một mục trong từ điển không tồn tại bằng cách sử dụng cú pháp lập chỉ mục. Lỗi này xuất hiện do Python không thể trả về giá trị cho một mục không tồn tại trong từ điển.
Từ điển Python là một tập hợp các cặp khóa-giá trị được lưu trữ trong dấu ngoặc nhọn ({}):
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" }
Các khóa là “tên”, “giá” và “RAM”. Các phím xuất hiện trước dấu hai chấm trong từ điển.
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
Hãy xem điều gì sẽ xảy ra nếu chúng tôi cố gắng truy xuất số lượng cổng USB trong từ điển của mình:
print(raspberry_pi["usb_ports"])
Mã của chúng tôi trả về:
KeyError: 'usb_ports'
Lỗi này cho chúng tôi biết khóa mà chúng tôi đã chỉ định không tồn tại. Trong trường hợp này, khóa bị thiếu là “usb_ports”.
KeyError Python:Giải pháp
Để xử lý KeyError từ điển Python, bạn có thể:
- Kiểm tra trước một khóa bằng cách sử dụng lập chỉ mục
- Sử dụng từ khóa “in” để tìm khóa
- Dùng thử… ngoại trừ khối.
Giải pháp để xử lý KeyError phù hợp nhất với bạn sẽ khác nhau tùy thuộc vào trường hợp sử dụng của bạn.
Sử dụng phương thức get () Từ điển
Phương thức get () từ điển Python trả về một giá trị trong từ điển. Bạn có thể chỉ định một giá trị mặc định bằng phương thức get (). Giá trị mặc định này được trả về nếu tên của khóa bạn đã chỉ định không có giá trị.
Hãy xem xét đoạn mã sau:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") print("The {} for this computer is {}.".format(get_key, raspberry_pi.get(get_key, "not available"))
Hãy chạy mã của chúng tôi bằng trình thông dịch Python và xem điều gì sẽ xảy ra:
What information would you like to retrieve? ALU The ALU for this computer is not available.
Mã của chúng tôi sử dụng phương thức get () từ điển để truy xuất “ALU” từ từ điển của chúng tôi. Không có giá trị nào tương ứng với tên khóa này. Phương thức get () trả về giá trị mặc định mà chúng tôi đã chỉ định, giá trị này "không khả dụng".
Kiểm tra khóa nâng cao bằng cách sử dụng lập chỉ mục
Bạn có thể kiểm tra sự tồn tại của khóa bằng cách sử dụng lập chỉ mục để tránh gặp phải KeyError. Nếu một khóa có trong từ điển, bạn có thể sử dụng khóa đó. Nếu không, bạn có thể hướng dẫn chương trình của mình làm điều gì đó khác mà không phụ thuộc vào khóa đó.
Hãy viết một chương trình truy cập các khóa trong từ điển “raspberry_pi” của chúng tôi bằng Python. Hãy kiểm tra xem khóa của chúng ta có trong từ điển của chúng ta hay không bằng cách sử dụng lập chỉ mục:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") if raspberry_pi[get_key]: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) else: print("This information is not available.")
Chúng tôi đã sử dụng câu lệnh Python “if” để kiểm tra xem khóa của chúng tôi có tồn tại hay không. “Raspberry_pi [get_key]” sẽ chỉ trả về một giá trị nếu khóa tồn tại. Điều này có nghĩa là nếu khóa của chúng tôi tồn tại, câu lệnh “if” của chúng tôi sẽ thực thi. Nếu khóa của chúng tôi không tồn tại, câu lệnh “else” sẽ thực thi.
Hãy thử tìm RAM cho Raspberry Pi của chúng tôi:
What information would you like to retrieve (name, price, RAM)? RAM The RAM for this computer is 4GB.
Bây giờ, hãy thử tìm hiểu xem máy tính có bao nhiêu cổng USB:
What information would you like to retrieve (name, price, RAM)? USB This information is not available.
Mã của chúng tôi không gây ra lỗi KeyError! Điều này là do trước tiên chúng tôi đã kiểm tra xem khóa của chúng tôi có tồn tại hay không trước khi sử dụng. Nếu chúng tôi đã sử dụng raspberry_pi [get_key] bên trong câu lệnh “else”, thì mã của chúng tôi sẽ trả về một KeyError.
Dùng thử… ngoại trừ Chặn
Một khối thử… ngoại trừ Python sẽ cố gắng chạy một dòng mã. Nếu dòng mã đó không thể chạy, mã của chúng tôi sẽ phát sinh lỗi tùy chỉnh theo các trường hợp ngoại lệ mà bạn đã nêu.
Chúng tôi có thể sử dụng một khối try… Ngoại trừ để xác định sự tồn tại của lỗi và ngăn chặn KeyError không mong muốn trợ giúp chương trình Python của chúng tôi.
Hãy xác định một lỗi tùy chỉnh cho ví dụ máy tính của chúng tôi trước đó bằng cách sử dụng thử… ngoại trừ khối:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") try: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) except KeyError: print("This information is not available.")
Chúng tôi sử dụng khối try… Trừ để cố gắng in ra một phần thông tin cụ thể về máy tính Raspberry Pi ra bảng điều khiển. Nếu mã của chúng tôi tạo ra Lỗi KeyError ở bất kỳ đâu trong khối “thử”, thì mã của chúng tôi sẽ thực thi nội dung của khối “ngoại trừ”.
Điều này có nghĩa là mỗi khi KeyError xuất hiện, “Thông tin này không khả dụng” sẽ được in ra bảng điều khiển. Hãy thử tìm hiểu về tên máy tính:
What information would you like to retrieve (name, price, RAM)? name The name for this computer is Raspberry Pi 4.
Bây giờ, hãy thử tìm hiểu về tính khả dụng của cổng USB của máy tính:
What information would you like to retrieve (name, price, RAM)? USB This information is not available.
Mã của chúng tôi tạo ra một KeyError bên trong khối "thử" của chúng tôi. Điều này khiến mã của chúng tôi thực thi khối mã “ngoại trừ”.
Kiểm tra một Key trong Sử dụng trước trong
Từ khóa “in” là một trong những toán tử thành viên của Python. Nó kiểm tra xem một mục có trong danh sách các giá trị hay không. Bạn có thể sử dụng từ khóa “in” để kiểm tra xem khóa có bên trong từ điển hay không.
Chương trình này sẽ kiểm tra xem khóa có tồn tại hay không trước khi in giá trị của nó ra bảng điều khiển:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") if get_key in raspberry_pi: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) else: print("This information is not available.")
Mã này sẽ kiểm tra xem giá trị của “get_key” có phải là một khóa bên trong từ điển “raspberry_pi” hay không. Nếu khóa tồn tại, câu lệnh “if” sẽ chạy. Nếu không, câu lệnh “else” sẽ chạy. Hãy thử kiểm tra thông tin về CPU của máy tính:
What information would you like to retrieve (name, price, RAM)? CPU This information is not available.
Hãy kiểm tra tên của máy tính:
What information would you like to retrieve (name, price, RAM)? name The name for this computer is Raspberry Pi 4.
Mã của chúng tôi hoạt động! Khi chúng tôi tìm kiếm một khóa không tồn tại, câu lệnh “else” sẽ chạy. Điều này có nghĩa là không có KeyError nào có thể được đưa ra trong mã của chúng tôi vì chúng tôi không cố gắng truy cập vào một khóa trong khối “else”.
Mã của chúng tôi hoạt động! Khi chúng tôi tìm kiếm một khóa không tồn tại, câu lệnh “else” sẽ chạy. Điều này có nghĩa là không có KeyError nào có thể được đưa ra trong mã của chúng tôi vì chúng tôi không cố gắng truy cập vào một khóa trong khối “else”.
Kết luận
Lỗi KeyError xuất hiện khi bạn cố gắng truy cập một giá trị từ từ điển không tồn tại. Để giải quyết lỗi khóa, bạn có thể kiểm tra khóa trả trước trước khi sử dụng và chỉ sử dụng nếu khóa đó tồn tại. Bạn có thể sử dụng thử… khối ngoại trừ để xử lý một lỗi chính.
Để được tư vấn về cách học ngôn ngữ lập trình Python, hãy xem hướng dẫn Cách học Python toàn diện của chúng tôi. Bạn sẽ tìm thấy các liên kết đến các tài nguyên học tập, sách và khóa học hàng đầu trong hướng dẫn này.