Tổng quan
Giảng dạy: 10 phút Bài tập: 15 phút 10 min
Exercises: 15 minCâu hỏi
Những loại lỗi có thể xảy ra trong các chương trình?
Làm thế nào tôi có thể xác định lỗi khi chúng xảy ra?
Mục tiêu
Giải thích sự khác biệt giữa lỗi cú pháp và ngoại lệ thời gian chạy.
Hiểu rằng Python đã tích hợp các ngoại lệ và nơi tìm thông tin về chúng.
Mô tả chính xác các tình huống trong đó
SyntaxError
,0,for i in range[10]: print[i]
1,for i in range[10]: print[i]
2 vàfor i in range[10]: print[i]
3 xảy ra.for i in range[10]: print[i]
Lỗi xảy ra
Bạn gần như chắc chắn đã gặp lỗi trong mã Python của bạn. Đối với người mới bắt đầu, phổ biến nhất là lỗi cú pháp, xảy ra khi mã của bạn không hợp lệ Python. Ví dụ:
>>> for i in range[10] print[i]
File "", line 1
for i in range[10] print[i]
^
SyntaxError: invalid syntax
Tại sao ví dụ đó tạo ra một lỗi cú pháp?
Thông điệp của Syntaxerror: Cú pháp không hợp lệ là chính xác, nhưng không hữu ích lắm.
Lưu ý rằng CARET [
4] chỉ ra nơi Python phát hiện ra một vấn đề. bạn nghĩ vấn đề là gì?for i in range[10]: print[i]
Dung dịch
Đại tràng [
5] phân định vòng lặpfor i in range[10]: print[i]
6 khỏi cơ thể vòng lặp bị thiếu. Lý do màfor i in range[10]: print[i]
7 được đánh dấu bằng CARET là bất kỳ mã nào theo câu lệnhfor i in range[10]: print[i]
6 đều không hợp lệ trừ khi câu lệnh được đi trước bởi dấu hai chấm [for i in range[10]: print[i]
5]. Vì vậy,for i in range[10]: print[i]
7 là mã không hợp lệ đầu tiên mặc dù lỗi thực tế xảy ra trước đó.for i in range[10]: print[i]
Mã chính xác sẽ là:
for i in range[10]: print[i]
Hãy xem xét kỹ hơn một thông báo lỗi:
File "", line 1
print ["hello world"
^
SyntaxError: unexpected EOF while parsing
- Thông báo chỉ ra một vấn đề trên dòng đầu tiên của đầu vào [dòng 1 dòng 1].
- Trong trường hợp này, phần IP IPYTHON INPUT của tên tệp cho chúng tôi biết rằng chúng tôi đang làm việc với đầu vào vào Ipython, trình thông dịch Python được sử dụng bởi Jupyter Notebook.
- Phần
1 của tên tệp chỉ ra rằng lỗi xảy ra trong ô 6 của sổ ghi chép của chúng tôi.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
- Tiếp theo là dòng mã có vấn đề, chỉ ra vấn đề với con trỏ
4.for i in range[10]: print[i]
Lỗi thời gian chạy xảy ra khi Python hiểu những gì bạn đang nói nhưng có điều gì đó không ổn trong khi một chương trình đang thực hiện
Chạy đoạn mã Python sau đây
numerator = 7 denominator = 0 result = numerator / denominator
Điều gì xảy ra?
Dung dịch
Đại tràng [
5] phân định vòng lặpfor i in range[10]: print[i]
6 khỏi cơ thể vòng lặp bị thiếu. Lý do màfor i in range[10]: print[i]
7 được đánh dấu bằng CARET là bất kỳ mã nào theo câu lệnhfor i in range[10]: print[i]
6 đều không hợp lệ trừ khi câu lệnh được đi trước bởi dấu hai chấm [for i in range[10]: print[i]
5]. Vì vậy,for i in range[10]: print[i]
7 là mã không hợp lệ đầu tiên mặc dù lỗi thực tế xảy ra trước đó.for i in range[10]: print[i]
>>> numerator = 7 >>> denominator = 0 >>> result = numerator / denominator Traceback [most recent call last]: File "", line 1, in ZeroDivisionError: division by zero
Mã chính xác sẽ là:
Hãy xem xét kỹ hơn một thông báo lỗi:
Thông báo chỉ ra một vấn đề trên dòng đầu tiên của đầu vào [dòng 1 dòng 1].
3File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
3for i in range[10]: print[i]
7File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
8File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
2for i in range[10]: print[i]
0numerator = 7 denominator = 0 result = numerator / denominator
Trong trường hợp này, phần IP IPYTHON INPUT của tên tệp cho chúng tôi biết rằng chúng tôi đang làm việc với đầu vào vào Ipython, trình thông dịch Python được sử dụng bởi Jupyter Notebook.
- Phần
1 của tên tệp chỉ ra rằng lỗi xảy ra trong ô 6 của sổ ghi chép của chúng tôi.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
- Tiếp theo là dòng mã có vấn đề, chỉ ra vấn đề với con trỏ
4.for i in range[10]: print[i]
firstName="Jon"
lastName="Smith"
File "", line 2
lastName="Smith"
^
IndentationError: unexpected indent
- Lỗi thời gian chạy xảy ra khi Python hiểu những gì bạn đang nói nhưng có điều gì đó không ổn trong khi một chương trình đang thực hiện
Chạy đoạn mã Python sau đây
- Điều gì xảy ra?
- Bạn nhận được một
3. Đây là ngoại lệ Python cho thấy lỗi thời gian chạy do bộ phận không. Lưu ý rằng mã là Python có giá trị về mặt cú pháp, vì vậy đây không phải là lỗi cú pháp.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
3 được tích hợp cho Python. Bài tập tiếp theo xem xét một số trường hợp ngoại lệ tích hợp hơn.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
- Khám phá các trường hợp ngoại lệ tích hợp
for number in range[10]: # use a if the number is a multiple of 3, otherwise use b if [Number % 3] == 0: message = message + a else: message = message + "b" print[message]
Hãy xem tài liệu cho các trường hợp ngoại lệ tích hợp. Xem nếu bạn có thể tìm thấy từng lỗi sau đây. Nếu đã gặp bất kỳ lỗi nào khác gần đây, hãy xem liệu bạn có thể tìm thấy những lỗi đó không.
- Điều gì xảy ra?
- Bạn nhận được một
3. Đây là ngoại lệ Python cho thấy lỗi thời gian chạy do bộ phận không. Lưu ý rằng mã là Python có giá trị về mặt cú pháp, vì vậy đây không phải là lỗi cú pháp.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
3 được tích hợp cho Python. Bài tập tiếp theo xem xét một số trường hợp ngoại lệ tích hợp hơn.File "", line 1 print ["hello world" ^ SyntaxError: unexpected EOF while parsing
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] print['My favorite season is ', seasons[4]]
Khám phá các trường hợp ngoại lệ tích hợp
Hãy xem tài liệu cho các trường hợp ngoại lệ tích hợp. Xem nếu bạn có thể tìm thấy từng lỗi sau đây. Nếu đã gặp bất kỳ lỗi nào khác gần đây, hãy xem liệu bạn có thể tìm thấy những lỗi đó không.
Th thụt lề có ý nghĩa trong Python.
Python sử dụng thụt vào các phần nhóm của mã với nhau [được thảo luận trong tập các vòng lặp].
Nếu vết lõm thay đổi theo cách mà Python không mong đợi, nó sẽ báo cáo một
0 [đây là một loại lỗi cú pháp cụ thể hơn].for i in range[10]: print[i]
Trong trường hợp này, phần IP IPYTHON INPUT của tên tệp cho chúng tôi biết rằng chúng tôi đang làm việc với đầu vào vào Ipython, trình thông dịch Python được sử dụng bởi Jupyter Notebook.