Loại lỗi thứ hai là lỗi thời gian chạy. Một chương trình có lỗi thời gian chạy là một chương trình vượt qua kiểm tra cú pháp phiên dịch và bắt đầu thực thi. Tuy nhiên, trong quá trình thực hiện một trong các câu lệnh trong chương trình, xảy ra lỗi đã khiến trình thông dịch ngừng thực hiện chương trình và hiển thị thông báo lỗi. Lỗi thời gian chạy cũng được gọi là ngoại lệ vì chúng thường chỉ ra rằng một cái gì đó đặc biệt [và xấu] đã xảy ra.runtime error. A program with a runtime error is one that passed the interpreter’s syntax checks, and started to execute. However, during the execution of one of the statements in the program, an error occurred that caused the interpreter to stop executing the program and display an error message. Runtime errors are also called exceptions
because they usually indicate that something exceptional [and bad] has happened. Dưới đây là một số ví dụ về các lỗi thời gian chạy phổ biến mà bạn chắc chắn gặp phải: Biến số và chức năng bị lỗi chính tả hoặc viết hoa không chính xác Nỗ lực thực hiện các hoạt động [như hoạt động toán học] trên dữ liệu của loại sai [ví dụ: cố gắng trừ hai biến giữ các giá trị chuỗi] Chia cho số không Nỗ lực sử dụng chức năng chuyển đổi loại như Chương trình sau đây chứa các lỗi thời gian chạy khác nhau. Bạn có thể phát hiện ra bất kỳ trong số họ? Sau khi định vị lỗi, chạy chương trình để xem thông báo lỗi. Lưu ý những khác biệt quan trọng sau đây giữa các lỗi cú pháp và lỗi thời gian chạy có thể giúp bạn khi bạn cố gắng chẩn đoán và sửa chữa vấn đề: Nếu thông báo lỗi đề cập đến Nếu chương trình chạy một phần và sau đó gặp sự cố, bạn sẽ biết vấn đề là lỗi thời gian chạy. Các chương trình có lỗi cú pháp không thực hiện ngay cả một dòng. Hãy theo dõi để biết thêm chi tiết về các loại lỗi thời gian chạy khác nhau. Chúng tôi có toàn bộ phần của chương này dành riêng cho chủ đề đó. Kiểm tra việc hiểu của bạn Điều nào sau đây là lỗi thời gian chạy?int
trên một giá trị có thể được chuyển đổi thành intSyntaxError
, bạn sẽ biết rằng vấn đề phải làm với cú pháp: cấu trúc của mã, dấu câu, v.v.
- Các lập trình viên.
- Các lập trình viên hiếm khi tìm thấy tất cả các lỗi thời gian chạy, có một chương trình máy tính sẽ làm điều đó cho chúng tôi.
- Thông dịch viên.
- Nếu một hướng dẫn là bất hợp pháp để thực hiện tại thời điểm đó trong quá trình thực hiện, trình thông dịch sẽ dừng lại với một thông báo mô tả ngoại lệ.
- Máy tính.
- Vâng, loại của. Nhưng đó là một điều đặc biệt trong máy tính làm điều đó. Máy tính độc lập mà không có phần bổ sung này không thể làm được.
- Giáo viên / người hướng dẫn.
- Giáo viên và người hướng dẫn của bạn có thể tìm thấy hầu hết các lỗi thời gian chạy của bạn, nhưng chỉ vì họ có kinh nghiệm xem mã và có thể viết mã. Với kinh nghiệm lỗi thời gian chạy dễ tìm hơn. Nhưng chúng tôi cũng có một cách tự động để tìm các loại lỗi này.
Ai hoặc những gì thường tìm thấy lỗi thời gian chạy?
Bạn đã thử các hoạt động trên trang này of activities on this page
Khi bạn làm ngày càng nhiều lập trình, bạn sẽ tự nhiên 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ì bạn bảo nó chạy, nhưng nếu không thể hiểu những gì bạn đang hỏi, thì nó sẽ không chạy chương trình. Tất cả đều giống nhau, Python sẽ cố gắng cho bạn biết một chút thông tin về những gì đã sai, để giúp bạn cố gắng sửa chữa nó.
Dưới đây là hai lỗi Python.
Trong ví dụ đầu tiên này, chúng ta quên sử dụng dấu ngoặc đơn được yêu cầu bởi print[...]
. Python không hiểu những gì bạn đang cố gắng làm.
Dưới đây là một ví dụ thứ hai về một lỗi trong Python.
Trong ví dụ thứ hai, chúng ta quên xác định biến greeting
. Python biết những gì bạn muốn nó làm, nhưng vì không có greeting
đã được xác định, một lỗi xảy ra.
Một lỗi cú pháp xảy ra khi Python không thể hiểu những gì bạn đang nói. Một 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 rắc rối khi làm theo hướng dẫn của bạn.syntax error happens when Python can't understand what you are saying. A run-time error happens when Python understands what you are saying, but runs into trouble when following your instructions.
Trong tiếng Anh, lỗi cú pháp sẽ giống như câusyntax error would be like the sentence
Xin vui lòng mèo chó.
Ngữ pháp của câu này không có ý nghĩa. Từ quan điểm của ngữ pháp tiếng Anh, nó bị 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 là giống như ngữ pháp.
Trong tiếng Anh, một lỗi thời gian chạy sẽ giống như câurun-time error would be like the sentence
Hãy ăn piano.
Câu có ý nghĩa từ góc độ ngữ pháp - có một động từ và danh từ ở đúng nơi - vì vậy bạn biết những gì bạn đang được yêu cầu làm. Nhưng, bạn sẽ gặp vấn đề một khi bạn bắt đầu cố gắng ăn piano [ngoại trừ có thể nếu bạn là mối]. Điều nà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 tôi cũng sẽ nói về các lỗi logic ở cuối, điều đó có nghĩa là chương trình của bạn chạy mà không gặp sự cố, nhưng vẫn tạo ra kết quả sai. Một ví dụ sẽ làlogic errors at the end, which means that your program runs without crashing, but still produces the wrong result. An example would be
Vui lòng đóng cửa sau để các lỗi không đến.
Đây sẽ là một lỗi logic nếu cửa trước cũng mở: mặc dù lệnh có ý nghĩa và bạn có thể đóng cửa sau cửa.
Lỗi cú pháp chung 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ẽ gặp phải một biểu tượng đặc biệt ở một nơi mà nó không mong đợi.
Python nói SyntaxError: invalid syntax
và chỉ với ^
đến điểm nhấn dấu. Vấn đề là !
không có ý nghĩa trong Python. Lỗi cú pháp sẽ biến mất nếu chúng tôi đặt print["Hello, World!"]
thay vào đó, bởi vì sau đó Python sẽ hiểu rằng !
là một phần của văn bản với SyntaxError
0.
Đây là một lỗi cú pháp khác tinh tế hơn.
Vấn đề là SyntaxError
1 là một từ đặc biệt trong Python. Nếu bạn đã viết SyntaxError
2 thay vì lớp học thì nó sẽ ổn. 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 báo giá xung quanh văn bản và bạn quên cái thứ hai hoặc bạn đang sử dụng dấu ngoặc đơn và quên cái thứ hai, bạn sẽ nhận được lỗi cú pháp:
Trong lỗi này, EOL là viết tắt cho cuối dòng: Python dự kiến một SyntaxError
3 khác nhưng dòng kết thúc trước khi nó được tìm thấy.EOL is short for
End Of Line: Python expected another SyntaxError
3 but the line ended before it was found.
Tương tự, EOF viết tắt cho cuối tệp: Python tiếp tục tìm kiếm một SyntaxError
4 nhưng tệp chương trình đã kết thúc trước khi nó được tìm thấy.EOF is short for End Of File: Python kept looking for a SyntaxError
4 but the program file ended before it was found.
Đôi khi hai lỗi cú pháp rất giống nhau có thể cung cấp hai thông báo lỗi rất khác nhau. Nhưng, mọi thông báo lỗi thực sự đang cố gắng nói với bạn đ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 chạy vào các vấn đề khi thực sự thực hiện các hướng dẫn.
- sử dụng một biến hoặc chức năng không xác định. Điều này cũng có thể xảy ra nếu bạn sử dụng các chữ cái viết hoa không nhất quán trong một tên biến:
- Chia cho 0, không có ý nghĩa trong toán học. [Tại sao? Vì 0 lần bất kỳ số nào là 0, không có giải pháp cho 1 = x * 0, vì vậy 1/0 không được xác định.]
- Sử dụng các toán tử về loại dữ liệu sai
Bạn sẽ tìm thấy nhiều cách tạo ra lỗi khi bạn tìm hiểu thêm về Python.
Sự khác biệt kỹ thuật giữa cú pháp và lỗi thời gian chạy là gì? Dưới đây là một ví dụ so sánh lỗi thời gian chạy với lỗi cú pháp. Nhìn vào đầu ra của mỗi chương trình. 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:
Vì vậy, một chương trình có lỗi cú pháp sẽ không thực thi các bước nào cả, nhưng một 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ó cú pháp hoặc lỗi 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ủ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?
Trung bình phải là
Nhưng chương trình in SyntaxError
5 thay thế! Lỗi lần này có liên quan đến "thứ tự hoạt động" trong số học. Khi bạn viết SyntaxError
6, điều này có ý nghĩa toán học giống như. Để khắc phục sự cố, dòng thứ ba của chương trình của chúng tôi nên được viết là SyntaxError
7, điều này nói rõ với Python rằng chúng tôi thực sự muốn giá trị, nơi chúng tôi thêm đầu tiên và chia sau.. To fix the problem, the third line of our program should be written as SyntaxError
7, which makes clear to Python that we really want the value
, where we add first and divide afterwards.
Bạn có thể có lỗi logic vì bạn đã thiết kế một chương trình không chính xác hoặc vì bạn không viết mã theo thiết kế một cách chính xác [như ví dụ SyntaxError
8]. 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 tốt hơn trong việc viết mã, bạn cũng sẽ tốt hơn trong việc tránh các lỗi logic. Bài 6D sẽ đưa ra một số lời khuyên về việc tránh các lỗi logic.
Bài tập
Bây giờ bài học đã hoàn tất, chúng tôi có ba bài tập về gỡ lỗi [sửa lỗi trong các chương trình]. Bạn có thể cố gắng phát hiện các lỗi trước khi chạy các 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 chữa.
Mỗi chương trình dưới đây đi kèm với một số mã đã được viết cho bạn. Bạn chỉ cần thay đổi một vài ký tự [chữ cái/ký hiệu/số] để sửa từng chương trình. Học sinh sẽ từ chối bất kỳ giải pháp nào thay đổi quá nhiều ký tự từ phiên bản gốc. Định dạng tập thể dục bất thường này có nghĩa là tương tự như gỡ lỗi trong thế giới thực, nơi mọi người thường vô tình bao gồm một lỗi đánh máy mà bạn có thể tìm thấy và sửa lỗi chính tả thay vì làm lại toàn bộ giải pháp? Chọn Đặt lại mã theo mặc định nếu bạn cần mang lại phiên bản gốc. This unusual exercise format is meant to be similar to real-world debugging, where people often accidentally include a typo—can you find and fix the typos rather than redoing the whole solution? Select Reset code to default if you need to bring back the original version. |
Một khi bạn đã đè bẹp tất cả các lỗi, hãy chuyển sang bài học tiếp theo!