Khi bạn lập trình ngày càng nhiều, tự nhiên bạn sẽ gặp phải rất nhiều lỗi [hoặc lỗi]. Nguyên nhân, hiểu và sửa lỗi là một phần quan trọng của lập trình. Python sẽ cố gắng hết sức để chạy bất cứ thứ gì mà bạn bảo nó chạy, nhưng nếu nó không hiểu bạn đang hỏi gì thì nó sẽ không chạy chương trình. Tương tự như vậy, Python sẽ cố gắng cho bạn biết một chút thông tin về những gì đã xảy ra, để giúp bạn cố gắng khắc phục nó
Đây là hai lỗi Python
Ví dụ. Lỗi cú pháp
Trong ví dụ đầu tiên này, chúng tôi quên sử dụng dấu ngoặc đơn được yêu cầu bởi print[...]
. Python không hiểu bạn đang cố làm gì
Đây là ví dụ thứ hai về lỗi trong Python
Ví dụ. Lỗi thời gian chạy
Trong ví dụ thứ hai, chúng ta quên định nghĩa biến greeting
. Python biết bạn muốn nó làm gì, nhưng vì không có greeting
nào được xác định nên sẽ xảy ra lỗi
Lỗi cú pháp xảy ra khi Python không thể hiểu bạn đang nói gì. Lỗi thời gian chạy xảy ra khi Python hiểu những gì bạn đang nói, nhưng gặp sự cố khi làm theo hướng dẫn của bạn
Trong tiếng Anh, một lỗi cú pháp sẽ giống như câu
Xin mèo chó khỉ
Ngữ pháp của câu này không có nghĩa. Từ góc độ ngữ pháp tiếng Anh, nó thiếu một động từ [hành động]. Bạn không thể hiểu những gì bạn đang được yêu cầu làm. Cú pháp có nghĩa giống như ngữ pháp
Trong tiếng Anh, lỗi thời gian chạy sẽ giống như câu
Hãy ăn piano
Câu có nghĩa từ góc độ ngữ pháp — có một động từ và danh từ ở đúng chỗ — vì vậy bạn biết bạn đang được yêu cầu làm gì. Tuy nhiên, bạn sẽ gặp phải vấn đề khi bắt đầu ăn đàn piano [có thể ngoại trừ nếu bạn là một con mối]. Đây được gọi là lỗi thời gian chạy vì nó xảy ra sau khi chương trình bắt đầu chạy
Chúng ta cũng sẽ nói về lỗi logic ở phần cuối, có nghĩa là chương trình của bạn chạy không bị lỗi nhưng vẫn cho ra kết quả sai. Một ví dụ sẽ là
Vui lòng đóng cửa sau để bọ không vào
Đây sẽ là một lỗi logic nếu cửa trước cũng đang mở. mặc dù lệnh có ý nghĩa và bạn có thể đóng cửa sau, nhưng điều này không thực sự hoàn thành mục tiêu ngăn chặn bọ vì chúng vẫn sẽ vào cửa trước
Các lỗi cú pháp phổ biến trong Python
Dưới đây là một vài ví dụ bổ sung về lỗi cú pháp có thể xảy ra trong Python. Một điều rất chung chung có thể xảy ra là Python sẽ bắt gặp một biểu tượng đặc biệt ở một nơi mà nó không ngờ tới.
Ví dụ. Lỗi cú pháp
Python nói SyntaxError: invalid syntax
và chỉ với ^
vào dấu chấm than. Vấn đề là !
không có ý nghĩa gì trong Python. Lỗi cú pháp sẽ biến mất nếu chúng ta đặt print["Hello, World!"]
thay vào đó, vì khi đó Python sẽ hiểu rằng !
là một phần của văn bản với Hello, World
Đây là một lỗi cú pháp khác tinh vi hơn
Ví dụ. Lỗi cú pháp
Vấn đề là class
là một từ đặc biệt trong Python. nếu bạn đã viết greeting
0 thay vì lớp thì sẽ ổn thôi. Nhấn vào đây để xem danh sách tất cả các "từ khóa" đặc biệt trong Python
Nếu bạn đang sử dụng dấu ngoặc kép xung quanh văn bản và bạn quên dấu ngoặc kép thứ hai hoặc bạn đang sử dụng dấu ngoặc đơn và quên dấu ngoặc kép thứ hai, bạn sẽ gặp lỗi cú pháp
Ví dụ. Lỗi cú pháp
Quên trích dẫn thứ haiTrong lỗi này, EOL là viết tắt của End Of Line. Python mong đợi một greeting
1 khác nhưng dòng này đã kết thúc trước khi nó được tìm thấy
Ví dụ. Lỗi cú pháp
Quên dấu ngoặc đơn thứ haiTương tự, EOF là viết tắt của End Of File. Python tiếp tục tìm kiếm một greeting
2 nhưng tệp chương trình đã kết thúc trước khi nó được tìm thấy
Đôi khi hai lỗi cú pháp rất giống nhau có thể đưa ra hai thông báo lỗi rất khác nhau. Tuy nhiên, mọi thông báo lỗi thực sự đang cố cho bạn biết điều gì đó hữu ích
Lỗi thời gian chạy
Dưới đây là một vài lỗi thời gian chạy phổ biến. Python có thể hiểu những gì chương trình nói, nhưng gặp sự cố khi thực sự thực hiện các hướng dẫn
- sử dụng một biến hoặc hàm không xác định. Điều này cũng có thể xảy ra nếu bạn sử dụng chữ in hoa không nhất quán trong tên biến
Ví dụ
Một biến không xác định - chia cho số không, không có ý nghĩa gì trong toán học. [Tại sao? Vì 0 nhân với bất kỳ số nào cũng bằng 0, nên không có nghiệm nào cho 1 = X * 0, vì vậy 1/0 không xác định. ]
Ví dụ
chia cho số không - sử dụng toán tử trên loại dữ liệu sai
Ví dụ
Thêm văn bản và một số
Bạn sẽ tìm thấy nhiều cách tạo lỗi hơn khi tìm hiểu thêm về Python
Ví dụ. Lỗi thời gian chạy
Ví dụ. Lỗi cú pháp
Chương trình có lỗi thời gian chạy đã tạo ra một số đầu ra, nhưng chương trình có lỗi cú pháp thì không. Điều này là do Python chạy theo hai bước- Python kiểm tra xem chương trình của bạn có đúng cú pháp hay không để xác định cấu trúc và các phần của nó
- Nếu bước 1 không gặp lỗi cú pháp thì chương trình được thực hiện
Vì vậy, một chương trình có lỗi cú pháp sẽ không thực hiện bước nào cả, nhưng chương trình có lỗi thời gian chạy sẽ thực hiện các bước xảy ra trước khi xảy ra lỗi
Lỗi logic
Chương trình của bạn có thể chạy mà không gặp sự cố [không có lỗi cú pháp hoặc thời gian chạy], nhưng vẫn làm sai. Ví dụ: có lẽ bạn muốn một chương trình tính trung bình cộng của hai số. trung bình của x và y được định nghĩa là
Tại sao chương trình này không hoạt động?
Ví dụ
Điều này không tính toán trung bình một cách chính xáctrung bình nên được
nhưng thay vào đó, chương trình in ra bản greeting
3. Lỗi lần này liên quan đến "thứ tự các phép toán" trong số học. Khi bạn viết greeting
4, điều này có nghĩa toán học giống như . Để khắc phục sự cố, dòng thứ ba trong chương trình của chúng ta nên được viết là greeting
5, điều này cho Python thấy rõ rằng chúng ta thực sự muốn giá trị , trong đó chúng ta cộng trước và chia sau.
Bạn có thể mắc lỗi logic do thiết kế chương trình không chính xác hoặc do bạn không viết mã theo đúng thiết kế [như ví dụ về greeting
6]. Các lỗi logic có thể khó phát hiện, đặc biệt là trong một chương trình dài hơn, nhưng khi bạn viết mã tốt hơn, bạn cũng sẽ giỏi hơn trong việc tránh các lỗi logic. Bài 6D sẽ đưa ra một số mẹo tránh lỗi logic
bài tập
Bây giờ bài học đã hoàn thành, chúng ta có ba bài tập về gỡ lỗi [sửa lỗi trong chương trình]. Bạn có thể thử phát hiện lỗi trước khi chạy chương trình hoặc bạn có thể chạy chúng trước và sử dụng phản hồi của Python để xác định những gì cần sửa