Không thể nhập lớp python

Lỗi cú pháp [lỗi cú pháp] là loại lỗi phát sinh do viết mã không tuân thủ theo quy tắc của ngôn ngữ. Lấy ví dụ

>>> print "hello" #lỗi cú pháp khi sử dụng hàm print[]
SyntaxError: Missing parentheses in call to 'print'. Did you mean print["hello"]?

Trong Python 2, đây là một lệnh chính xác. Tuy nhiên đây lại là một cú pháp error in Python 3. Python 3 chuyển print[] từ một lệnh [câu lệnh] trở thành một hàm thông thường. Do vậy phải gọi hàm print[] với cú pháp dành cho lời gọi hàm.

a = 10
b = 0
print[a/b]
print[a]
print[b]
5o thế giới. ’]

Loại lỗi này thường gặp ở những người mới học lập trình Python. Đôi khi, chúng tôi cũng xuất hiện do người viết mã vô tình nhập nhầm. Lỗi này cũng hay xảy ra khi chạy mã viết cho Python 2 trong Python 3 [và ngược lại] do hai phiên bản này có một số khác biệt về cú pháp

Lỗi cú pháp thường xuyên phát hiện và sửa chữa. Trình thông dịch Python hoặc các công cụ hỗ trợ của IDE có thể phát hiện ra lỗi cú pháp ngay từ lúc viết mã. Khi gặp lỗi cú pháp, trình thông dịch Python sẽ đưa ra thông báo SyntaxError với thông tin chi tiết về lỗi liên quan

Do đặc thù của thông dịch ngôn ngữ, mặc dù có lỗi cú pháp, Python vẫn thực thi tập lệnh tệp nhưng sẽ dừng lại ở vị trí lỗi. Điều này khác với các ngôn ngữ biên dịch [như C#] – ngắt biên dịch khi gặp lỗi cú pháp, chương trình chỉ chạy sau khi biên dịch

Thực thi lỗi [lỗi thời gian chạy] là loại lỗi phát sinh trong quá trình chạy chương trình. Error thực thi còn được gọi là ngoại lệ [ngoại lệ]. Ví dụ, trong chương trình bạn vô tình thực sự cho phép chia cho 0, hoặc truy xuất một tệp không tồn tại trên ổ đĩa

Đây là loại lỗi liên quan đến logic của chương trình. Loại lỗi này rất khó phát hiện. Ít nhất thì bạn không thể phát hiện chúng ở giai đoạn viết mã. Họ cũng chỉ xuất hiện khi thực thi trong những điều kiện nhất định

Ứng với mỗi loại lỗi thực thi, Python sử dụng một lớp riêng để mô tả. Ví dụ, để mô tả lỗi chia cho 0, Python sử dụng lớp

a = 10
b = 0
print[a/b]
print[a]
print[b]
6. Python cung cấp rất nhiều class như vậy. Chúng được gọi chung là ngoại lệ xây dựng sẵn [ngoại lệ tích hợp sẵn]. Các lớp này có đặc điểm là tên gọi kết thúc bằng 'Lỗi'

Nếu không nhớ, hãy đọc lại bài học về class trong Python

Một dạng “lỗi” đặc biệt của Python được gọi là lỗi đánh giá [lỗi xác nhận]. Đây là một loại “lỗi” liên quan đến giá trị của một biểu thức không đạt được yêu cầu

Ví dụ, bạn yêu cầu người dùng tuổi nhập học. Tuổi phải là một số nguyên dương, nếu người dùng nhập một giá trị âm, đây có thể được coi là một lỗi khẳng định

Khẳng định lỗi được sử dụng trong gỡ lỗi và kiểm tra. Python cung cấp một cú pháp riêng để xác nhận lỗi

Cơ chế xử lý ngoại lệ mặc định của Python

Một cách thức xử lý chung mà Python [và các ngôn ngữ lập trình khác] được áp dụng khi gặp lỗi loại là dừng thực hiện chương trình và phát ra thông tin về lỗi mà nó gặp phải. Đây là cách thức xử lý ngoại lệ [xử lý ngoại lệ] mặc định của Python

Trong cơ chế xử lý ngoại lệ mặc định, Python sẽ [1] dừng thực hiện chương trình khi có lỗi, [2] tạo đối tượng của lớp ngoại lệ tương ứng, [3] in ra thông báo lỗi từ đối tượng ngoại lệ với thông tin chi tiết

Ví dụ, khi gặp lỗi phải chia lỗi cho 0, Python sẽ dừng thực thi tại dòng lệnh lỗi và phát thông báo

a = 10
b = 0
print[a/b]
print[a]
print[b]
7. Cụ thể hơn, nếu bạn chạy tập lệnh sau

a = 10
b = 0
print[a/b]
print[a]
print[b]

Bạn sẽ gặp lỗi thông báo

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero

Theo thông báo này, trong ngoại lệ tệp. py, dòng thứ 3, lệnh print[a/b] gặp lỗi chia cho 0

Từ thông báo này bạn có thể biết chính xác lỗi ở đâu và lỗi gì. Nó rất hữu ích trong giai đoạn gỡ lỗi chương trình

Lớp ngoại lệ khả dụng trong Python

Ứng với mỗi loại lỗi thực thi, Python sử dụng một lớp riêng để mô tả. Ví dụ, để mô tả lỗi chia cho 0, Python sử dụng lớp

a = 10
b = 0
print[a/b]
print[a]
print[b]
6. Để mô tả lỗi truy xuất tệp không tồn tại, Python sử dụng lớp
a = 10
b = 0
print[a/b]
print[a]
print[b]
9

Python cung cấp rất nhiều class như vậy. Chúng được gọi chung là ngoại lệ xây dựng sẵn [ngoại lệ tích hợp sẵn]. Các lớp này có đặc điểm là tên gọi kết thúc bằng 'Lỗi'

Dưới đây là một số lớp ngoại lệ thường gặp

IndexError – xuất hiện khi truy xuất phần tử của danh sách theo chỉ số

________số 8

ModuleNotFoundError – xuất hiện khi nhập một mô-đun không tồn tại

>>> # ModuleNotFoundError - xuất hiện khi import một module không tồn tại
>>> import notamodule # không có module này
Traceback [most recent call last]:
File "", line 1, in 
import notamodule
ModuleNotFoundError: No module named 'notamodule'

ImportError – xuất hiện khi định danh trong lệnh nhập không chính xác

a = 10
b = 0
print[a/b]
print[a]
print[b]
0

TypeError – xuất hiện khi thực hiện phép toán trên những kiểu dữ liệu không phù hợp

a = 10
b = 0
print[a/b]
print[a]
print[b]
1

ValueError – xuất hiện khi biến đổi kiểu

a = 10
b = 0
print[a/b]
print[a]
print[b]
2

NameError – xuất hiện khi sử dụng một danh nghĩa chưa được định nghĩa

a = 10
b = 0
print[a/b]
print[a]
print[b]
3

Danh sách tất cả các ngoại lệ được xây dựng sẵn của Python trên trang tài liệu chính thức của Python. https. // tài liệu. con trăn. tổ chức/3. 8/thư viện/ngoại lệ. html

Tự động xử lý ngoại lệ với try. ngoại trừ

Cách thức xử lý ngoại lệ mặc định chỉ phù hợp ở giai đoạn gỡ lỗi. Nếu để chế độ này hoạt động trên ứng dụng đã khai triển sẽ rất không phù hợp. Nó tạo cảm giác thiếu ổn định cho ứng dụng. Ngoài ra, người dùng cuối cùng cũng không biết làm gì với các thông báo lỗi đó

Vì vậy, trước khi triển khai ứng dụng, bạn cần xây dựng cơ chế xử lý ngoại lệ riêng để đảm bảo ứng dụng hoạt động ổn định

Cơ chế xử lý ngoại lệ riêng sẽ ngắt chế độ xử lý ngoại lệ mặc định trên một nhóm mã định rõ nhất và thay thế bằng cách thức xử lý khác do người lập trình tự xây dựng thực hiện

Python cung cấp cú pháp try. ngoại trừ để bạn tự mình xử lý ngoại lệ. Cú pháp chung của cấu trúc này như sau

a = 10
b = 0
print[a/b]
print[a]
print[b]
4

Cấu trúc này bao gồm 4 khối. thử, ngoại trừ, khác, cuối cùng. Trong đó thử và ngoại trừ là bắt buộc, khác và cuối cùng là tùy chọn

Khối

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero
0 chứa các nguy hiểm lệnh. Lệnh nguy hiểm là lệnh ẩn khả năng phát hiện lỗi thực thi. Ví dụ, phép chia là một lệnh nguy hiểm vì khả năng ẩn khả năng chia cho 0. Truy xuất tệp là một lệnh nguy hiểm vì tiềm ẩn khả năng truy xuất tệp không tồn tại. v. v. Constructor try. ngoại trừ bắt buộc phải có và chứa duy nhất 1 khối thử

Khối

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero
1 chứa các lệnh sẽ được thực hiện nếu phát sinh lỗi trong khối thử. Cấu hình cấu trúc này bắt buộc phải có ít nhất một khối ngoại trừ. Có thể xây dựng nhiều khối ngoại trừ trong cùng một cấu trúc try. ngoại trừ. Chúng ta sẽ nói kỹ hơn về cách xây dựng các khối ngoại trừ trong phần tiếp theo của bài học

Khối

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero
2 chứa các lệnh sẽ được thực thi nếu KHÔNG phát sinh lỗi trong khối thử. Nói cách khác, khối khác và khối ngoại trừ luôn đối lập nhau. if has done except [có lỗi] thì không thực hiện other; . Các khối khác không bắt buộc

Khối

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero
3 chứa các lệnh luôn luôn được thực hiện, bất kể có lỗi hay không. Đây cũng là khối không bắt buộc

Cấu trúc sử dụng try. ngoại trừ

Ở phần trước chúng ta đã nói đến lý thuyết chung về cấu trúc thử. ngoại trừ. Tiếp theo đây chúng ta sẽ nói chi tiết về cách sử dụng cấu trúc này

Hãy cùng thực hiện một ví dụ

a = 10
b = 0
print[a/b]
print[a]
print[b]
0

Đây là ví dụ sử dụng cấu trúc try. ngoại trừ cơ bản nhất. Cách sử dụng này bắt tất cả các loại lỗi có thể phát sinh trong khối thử. Nói cách khác, đường sử dụng này sẽ thực hiện khối thi trừ khi có bất kỳ lỗi nào phát sinh trong khối thử. Tuy nhiên, ở trong khối ngoại trừ việc không biết bất kỳ thông tin nào về lỗi xảy ra

Cách sử dụng này thực tế sẽ ẩn đi bất kỳ lỗi thực thi nào. Nhìn chung bạn không nên sử dụng lối viết này

Vui lòng xem một ví dụ khác

a = 10
b = 0
print[a/b]
print[a]
print[b]
1

Sự khác biệt của cách sử dụng đường dẫn này là có thêm tên kiểu ngoại lệ trong phần ngoại trừ

Với bài viết này, chỉ những lỗi liên quan đến TypeError [lỗi không đồng bộ kiểu trong phép toán] mới bị bắt. Các loại lỗi khác sẽ bị loại bỏ. Nghĩa là, chỉ khi nào phát sinh lỗi TypeError thì khối mã ngoại trừ mới được thực thi. Nếu phát sinh lỗi khác thì vẫn thực hiện cơ chế xử lý lỗi mặc định của Python

Bạn cũng có thể ghép nhiều khối ngoại trừ với nhau như sau

a = 10
b = 0
print[a/b]
print[a]
print[b]
2

Khi này, mỗi khối ngoại trừ sẽ chịu trách nhiệm cho một lỗi cụ thể

Bạn có thể sử dụng thông tin chi tiết về lỗi như sau

a = 10
b = 0
print[a/b]
print[a]
print[b]
3

Hãy chú ý đến phần

Traceback [most recent call last]:
File "exception.py", line 3, in
print[a/b]
ZeroDivisionError: division by zero
4 ở phần đầu của mỗi khối ngoại trừ. Với lỗi viết này, đối tượng ngoại lệ sẽ được trỏ tới bởi tương ứng và bạn có thể sử dụng trong khối ngoại trừ

Chủ Đề