Computer >> Máy Tính >  >> Lập trình >> Python

Ngoại lệ Python:Hướng dẫn

Các ngoại lệ có thể được đưa ra bởi trình thông dịch Python và theo cách thủ công. Các ngoại lệ được tích hợp sẵn giúp bắt các lỗi phổ biến trong chương trình.

Trong hướng dẫn này, chúng ta sẽ thảo luận về ngoại lệ là gì và cách chúng được sử dụng. Chúng tôi sẽ giới thiệu cho các bạn một ví dụ về cách nêu ra một ngoại lệ để bạn có thể làm việc với chúng trong mã của mình.

Ngoại lệ là gì?

Một ngoại lệ, còn được gọi là lỗi logic, là một lỗi xảy ra trong thời gian chạy chương trình.

Có hai loại lỗi trong Python:lỗi cú pháp và lỗi thời gian chạy. Lỗi cú pháp được đưa ra trước khi chương trình chạy. Nếu chương trình của bạn gặp lỗi cú pháp, chương trình của bạn sẽ không thể chạy. Điều này là do Python không thể diễn giải mã có lỗi cú pháp.

Lỗi thời gian chạy, còn được gọi là ngoại lệ, gặp phải khi Python chạy một chương trình. Một ngoại lệ có thể được nêu ra trên dòng 30 của một chương trình. Nếu một ngoại lệ được nêu ra trên dòng 30, 30 dòng mã sẽ chạy, sau đó chương trình sẽ dừng lại.

Đây là một ví dụ về một ngoại lệ:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
	s_names.append(n)
AttributeError: 'str' object has no attribute 'append'

Ngoại lệ này cho chúng ta biết Python không thể chạy phần còn lại của mã của chúng ta. Nếu gặp trường hợp ngoại lệ, bạn nên đọc kỹ thông báo. Thông báo lỗi sẽ cho bạn biết hầu hết, nếu không phải là tất cả, những gì bạn cần biết để giải quyết lỗi.

Hãy phân tích câu cuối cùng trong thông báo lỗi của chúng tôi:

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ọ.

AttributeError:Đối tượng ‘str’ không có thuộc tính ‘append’

Trong trường hợp này, chúng tôi biết lỗi của chúng tôi là lỗi thuộc tính. Điều này có nghĩa là chúng tôi đang cố gắng tham chiếu một thuộc tính không tồn tại. Thông báo lỗi của chúng tôi cho chúng tôi biết rằng chúng tôi đang cố gắng sử dụng append () trên một đối tượng chuỗi, đối tượng này không được phép.

Vì các đối tượng chuỗi không hỗ trợ append() , một bước tốt tiếp theo là tìm kiếm tương đương với append() đối với chuỗi. Đây là nối. Giờ đây, chúng tôi có một giải pháp tiềm năng cho vấn đề lập trình của mình mà chúng tôi có thể áp dụng.

Tôi có thể gặp trường hợp ngoại lệ ở đâu?

Để giúp các lập trình viên bắt lỗi trong mã của họ, Python có một loạt các ngoại lệ được tích hợp sẵn. Những ngoại lệ này có thể giúp bạn xác định nguyên nhân của sự cố trong mã của bạn để bạn có thể khắc phục chúng. Dưới đây là một số trường hợp ngoại lệ phổ biến nhất mà bạn có thể gặp phải:

  • TypeError:Xảy ra khi bạn áp dụng một hàm cho một đối tượng có kiểu không hỗ trợ hàm đó. (ví dụ:TypeError:chỉ có thể tham gia một tệp có thể lặp lại)
  • SyntaxError:Xuất hiện trước khi chương trình thực thi để cho bạn biết rằng có vấn đề trong cú pháp của bạn (ví dụ:SyntaxError:cú pháp không hợp lệ)
  • KeyError:Xảy ra nếu bạn tham chiếu một khóa trong từ điển không tồn tại. (ví dụ:KeyError:“usb_ports”)
  • ImportError:Xảy ra nếu bạn cố gắng nhập một gói không tồn tại hoặc một hàm từ một gói không tồn tại.

Chúng tôi chỉ liệt kê một vài trường hợp ngoại lệ mà bạn có thể gặp phải trong ngôn ngữ Python.

Cách tăng ngoại lệ

Bạn có thể xác định các ngoại lệ tùy chỉnh của riêng mình trong mã của bạn. Điều này có thể hữu ích nếu các ngoại lệ tích hợp được cung cấp bởi Python không phù hợp với nhu cầu cho chương trình của bạn.

Chúng tôi sẽ viết một chương trình xác thực mật khẩu cho một trò chơi. Để bắt đầu, hãy yêu cầu người dùng chèn mật khẩu:

password = input("Enter a password: ")

Để mật khẩu của người dùng hợp lệ, mật khẩu phải dài hơn 12 ký tự. Nếu mật khẩu của người dùng từ 12 ký tự trở xuống, chúng tôi muốn đưa ra một ngoại lệ.

Để làm điều này, chúng tôi sẽ sử dụng câu lệnh if. Câu lệnh if sau đây sẽ kiểm tra xem mật khẩu mà người dùng đã chọn có ít hơn 12 ký tự hay không:

if len(password) > 12:
	print("Your password is valid.")
else:
	raise Exception("Your password is not the correct length.")

Chúng tôi sử dụng phương thức len () để tính độ dài của mật khẩu của người dùng. Nếu người dùng chèn một mật khẩu không hợp lệ, chương trình của chúng tôi sẽ đưa ra một ngoại lệ với thông báo “Mật khẩu của bạn không đúng độ dài”.

Hãy thử mã của chúng tôi để xem nó có hoạt động không:

Enter a password: Bacon120
Traceback (most recent call last):
  File "main.py", line 6, in <module>
	raise Exception("Your password is not the correct length.")
Exception: Your password is not the correct length.

Mật khẩu chúng tôi đã nhập dưới 12 ký tự. Mã của chúng tôi dừng lại vì chúng tôi đã nhập mật khẩu không hợp lệ. Hãy thử chạy chương trình của chúng tôi với mật khẩu hợp lệ:

Enter a password: Bacon120Bacon120
Your password is valid.

Chương trình của chúng tôi thực thi thành công.

Cách xử lý trường hợp ngoại lệ

Theo mặc định, các ngoại lệ sẽ dừng việc thực thi một chương trình. Mặc dù điều này hữu ích vì nó buộc bạn phải tìm ra giải pháp cho lỗi, nhưng có một số trường hợp bạn có thể không muốn chương trình của mình ngừng thực thi nếu một ngoại lệ được đưa ra.

Ví dụ:nếu bạn đang kiểm tra xem các điểm dữ liệu trong danh sách có hợp lệ hay không, bạn có thể không muốn đưa ra một ngoại lệ mỗi khi một điểm dữ liệu không hợp lệ được phát hiện.

Để xử lý một ngoại lệ, bạn có thể sử dụng khối “thử… ngoại trừ”. Hãy viết một chương trình tìm một mục trong từ điển. Từ điển này chứa danh sách tên của các sinh viên trong một lớp và điểm tương ứng của họ trong bài kiểm tra gần đây nhất của họ.

Để bắt đầu, hãy xác định một từ điển với thông tin về học sinh và điểm:

data = {
	"Lucy": 73,
	"Carlton": 59,
	"Adam": 73
}

Tiếp theo, hãy yêu cầu người dùng chèn tên có điểm mà họ muốn truy xuất. Chúng tôi sẽ thực hiện điều này trong một khối "thử" để chúng tôi có thể xử lý một ngoại lệ sau này trong mã của chúng tôi:

try:
	student = input("Enter the name of the student whose grade you want to retrieve: ")
	print(data[student])

Mã này sẽ in ra điểm của học sinh có tên trùng với điểm mà người dùng đã chèn vào chương trình. Tuy nhiên, nếu người dùng chèn tên không hợp lệ, KeyError sẽ gặp phải.

Chúng tôi sẽ xử lý vấn đề này bằng cách thêm khối ngoại trừ vào mã của mình:

try:
	student = input("Enter the name of the student whose grade you want to retrieve: ")
	print(data[student])
except:
	print("This student is not present in the list of grades.")

Nếu không tìm thấy học sinh, mệnh đề ngoại trừ được thực hiện. Hãy chạy chương trình của chúng tôi:

Enter the name of the student whose grade you want to retrieve: Lucy
73

Khi chúng tôi nhập tên sinh viên hợp lệ, chương trình của chúng tôi sẽ hoạt động. Hãy thử chương trình của chúng tôi nếu chúng tôi chèn tên sinh viên không hợp lệ:

Enter the name of the student whose grade you want to retrieve: Kaitlin
This student is not present in the list of grades.

Một ngoại lệ được nêu ra nhưng chương trình của chúng tôi không dừng lại. Thay vào đó, nội dung của khối “ngoại trừ” được thực thi.

Để tìm hiểu thêm về khối try… Ngoại trừ, hãy đọc hướng dẫn của chúng tôi về khối Python try… Ngoại trừ.

Kết luận

Các trường hợp ngoại lệ thông báo cho bạn biết rằng có một lỗi logic trong mã của bạn. Khi một ngoại lệ được đưa ra, bạn sẽ thấy loại ngoại lệ, nơi đặt ra ngoại lệ, cũng như một thông báo lỗi. Bạn có thể sử dụng thông tin này để tìm nguyên nhân của ngoại lệ.

Bạn có thể nêu ra các ngoại lệ của riêng mình bằng cách sử dụng câu lệnh tăng. Bạn có thể xử lý các trường hợp ngoại lệ bằng cách sử dụng khối mã try… Ngoại trừ.

Bây giờ bạn có các công cụ cần thiết để giải quyết một ngoại lệ Python như một người chuyên nghiệp!