Những loại lỗi nào bạn có thể phải gỡ lỗi trong python?
Các loại lỗi khác nhau có thể xảy ra trong một chương trình và rất hữu ích khi phân biệt chúng để theo dõi chúng nhanh hơn Show
Bước đầu tiên trong quá trình gỡ lỗi là tìm ra loại lỗi mà bạn đang xử lý. Mặc dù các phần sau đây được sắp xếp theo loại lỗi, một số kỹ thuật có thể áp dụng trong nhiều trường hợp Lỗi cú phápLỗi cú pháp thường dễ sửa sau khi bạn tìm ra chúng là gì. Thật không may, các thông báo lỗi thường không hữu ích. Các thông báo phổ biến nhất là Lỗi cú pháp. không hợp lệ cú pháp và Lỗi cú pháp. không hợp lệ mã thông báo , cả hai trường hợp đều không có nhiều thông tin. Mặt khác, thông báo cho bạn biết vấn đề xảy ra ở đâu trong chương trình. Trên thực tế, nó cho bạn biết Python đã nhận thấy sự cố ở đâu, điều này không nhất thiết là lỗi ở đâu. Đôi khi lỗi xảy ra trước vị trí của thông báo lỗi, thường ở dòng trước Nếu bạn đang xây dựng chương trình dần dần, bạn nên biết rõ lỗi nằm ở đâu. Nó sẽ ở dòng cuối cùng bạn đã thêm Nếu bạn đang sao chép mã từ một cuốn sách, hãy bắt đầu bằng cách so sánh thật cẩn thận mã của bạn với mã của cuốn sách. Kiểm tra mọi ký tự. Đồng thời, hãy nhớ rằng cuốn sách có thể sai, vì vậy nếu bạn thấy điều gì đó giống như lỗi cú pháp, thì đó có thể là Dưới đây là một số cách để tránh các lỗi cú pháp phổ biến nhất
Nếu không có gì hoạt động, hãy chuyển sang phần tiếp theo Tôi không thể chạy chương trình của mình bất kể tôi làm gìNếu trình biên dịch báo có lỗi mà bạn không nhìn thấy, đó có thể là do bạn và trình biên dịch không nhìn vào cùng một đoạn mã. Kiểm tra môi trường lập trình của bạn để đảm bảo rằng chương trình bạn đang chỉnh sửa là chương trình mà Python đang cố chạy. Nếu bạn không chắc chắn, hãy thử đặt một lỗi cú pháp rõ ràng và cố ý vào đầu chương trình. Bây giờ hãy chạy lại (hoặc nhập) nó. Nếu trình biên dịch không tìm thấy lỗi mới, có thể có điều gì đó không ổn với cách thiết lập môi trường của bạn Nếu điều này xảy ra, một cách tiếp cận là bắt đầu lại với một chương trình mới như Hello, World. và đảm bảo rằng bạn có thể chạy một chương trình đã biết. Sau đó dần dần thêm các phần của chương trình mới vào chương trình đang hoạt động lỗi thời gian chạyKhi chương trình của bạn đúng về mặt cú pháp, Python có thể nhập nó và ít nhất là bắt đầu chạy nó. Cái gì có thể đi sai? chương trình của tôi hoàn toàn không có gìSự cố này phổ biến nhất khi tệp của bạn bao gồm các hàm và lớp nhưng không thực sự gọi bất kỳ thứ gì để bắt đầu thực thi. Điều này có thể là cố ý nếu bạn chỉ định nhập mô-đun này để cung cấp các lớp và hàm Nếu không cố ý, hãy đảm bảo rằng bạn đang gọi một hàm để bắt đầu thực thi hoặc thực thi một hàm từ lời nhắc tương tác. Cũng xem phần dưới đây chương trình của tôi bị treoNếu một chương trình dừng lại và dường như không làm gì cả, chúng tôi nói rằng nó đang bị treo. Điều đó thường có nghĩa là nó bị vướng vào vòng lặp vô hạn hoặc đệ quy vô hạn
Vòng lặp vô hạnNếu bạn cho rằng mình có một vòng lặp vô hạn và bạn biết vòng lặp nào đang gây ra sự cố, hãy thêm câu lệnh in vào cuối . Ví dụ 1 2 3 4 5 6 7while x > 0 and y < 0: # Do something to x # Do something to y print("x: ", x) print("y: ", y) print("condition: ", (x > 0 and y < 0)) Bây giờ khi bạn chạy chương trình, bạn sẽ thấy ba dòng đầu ra cho mỗi lần chạy qua vòng lặp. Lần cuối cùng trong vòng lặp, điều kiện phải là Sai . Nếu vòng lặp tiếp tục, bạn sẽ có thể thấy các giá trị của x và y, and you might figure out why they are not being updated correctly. Trong môi trường phát triển như PyScripter, người ta cũng có thể đặt điểm dừng ở đầu vòng lặp và thực hiện một bước trong vòng lặp. Trong khi bạn thực hiện việc này, hãy kiểm tra các giá trị của x và y bằng cách di chuột . Tất nhiên, tất cả việc lập trình và gỡ lỗi đều yêu cầu bạn phải có một mô hình tinh thần tốt về những gì thuật toán phải thực hiện. nếu bạn không hiểu điều gì sẽ xảy ra với x và y . Có lẽ nơi tốt nhất để gỡ lỗi mã là cách xa máy tính của bạn, làm việc dựa trên sự hiểu biết của bạn về những gì sẽ xảy ra. đệ quy vô hạnHầu hết thời gian, đệ quy vô hạn sẽ khiến chương trình chạy một lúc rồi tạo ra Đệ quy tối đa recursion depth exceeded error. Nếu bạn nghi ngờ rằng một hàm hoặc phương thức đang gây ra đệ quy vô hạn, hãy bắt đầu bằng cách kiểm tra để đảm bảo rằng có trường hợp cơ sở. Nói cách khác, cần có một số điều kiện sẽ khiến hàm hoặc phương thức trả về mà không thực hiện lời gọi đệ quy. Nếu không, thì bạn cần suy nghĩ lại về thuật toán và xác định trường hợp cơ sở Nếu có trường hợp cơ sở nhưng chương trình dường như không tiếp cận được trường hợp đó, hãy thêm câu lệnh in vào đầu trường hợp . Bây giờ khi bạn chạy chương trình, bạn sẽ thấy một vài dòng đầu ra mỗi khi hàm hoặc phương thức được gọi và bạn sẽ thấy các tham số. Nếu các tham số không chuyển sang trường hợp cơ sở, bạn sẽ có một số ý tưởng về lý do tại sao không. Một lần nữa, nếu bạn có một môi trường hỗ trợ thao tác đơn bước, điểm dừng và kiểm tra dễ dàng, hãy học cách sử dụng chúng thật tốt. Theo ý kiến của chúng tôi, việc xem qua mã từng bước sẽ xây dựng mô hình tinh thần tốt nhất và chính xác nhất về cách thức tính toán diễn ra. Sử dụng nó nếu bạn có nó Quy trình thực hiệnNếu bạn không chắc luồng thực thi đang di chuyển như thế nào trong chương trình của mình, hãy thêm các câu lệnh print vào đầu mỗi hàm với một . foo, where foo is the name of the function. Bây giờ khi bạn chạy chương trình, nó sẽ in dấu vết của từng chức năng khi nó được gọi Nếu bạn không chắc chắn, hãy xem qua chương trình với trình gỡ lỗi của bạn Khi tôi chạy chương trình, tôi nhận được một ngoại lệNếu xảy ra sự cố trong thời gian chạy, Python sẽ in một thông báo bao gồm tên của ngoại lệ, dòng chương trình nơi xảy ra sự cố và truy nguyên Đặt một điểm dừng trên dòng gây ra ngoại lệ và nhìn xung quanh Traceback xác định chức năng hiện đang chạy, sau đó là chức năng đã gọi nó, và sau đó là chức năng đã gọi chức năng đó, v.v. Nói cách khác, nó lần theo đường dẫn của các lệnh gọi hàm đưa bạn đến vị trí hiện tại. Nó cũng bao gồm số dòng trong tệp của bạn nơi mỗi cuộc gọi này xảy ra Bước đầu tiên là kiểm tra vị trí xảy ra lỗi trong chương trình và xem liệu bạn có thể tìm ra điều gì đã xảy ra không. Đây là một số lỗi thời gian chạy phổ biến nhất NameErrorBạn đang cố sử dụng một biến không tồn tại trong môi trường hiện tại. Hãy nhớ rằng các biến cục bộ là cục bộ. Bạn không thể tham khảo chúng từ bên ngoài chức năng nơi chúng được xác định. LoạiLỗiCó một số nguyên nhân có thể
Tôi đã thêm quá nhiều câu lệnh in khiến đầu ra tràn ngập.Một trong những vấn đề khi sử dụng câu lệnh in để gỡ lỗi là bạn có thể bị chôn vùi trong đầu ra. Có hai cách để tiến hành. đơn giản hóa đầu ra hoặc đơn giản hóa chương trình. Để đơn giản hóa đầu ra, bạn có thể xóa hoặc nhận xét các câu lệnh in không hữu ích hoặc kết hợp chúng hoặc định dạng đầu ra . Để đơn giản hóa chương trình, có một số điều bạn có thể làm. Đầu tiên, thu nhỏ vấn đề mà chương trình đang giải quyết. Ví dụ: nếu bạn đang sắp xếp một dãy, hãy sắp xếp một dãy nhỏ. Nếu chương trình lấy đầu vào từ người dùng, hãy cung cấp cho nó đầu vào đơn giản nhất gây ra sự cố Thứ hai, dọn dẹp chương trình. Xóa mã chết và sắp xếp lại chương trình để dễ đọc nhất có thể. Ví dụ: nếu bạn nghi ngờ rằng sự cố nằm ở một phần được lồng sâu trong chương trình, hãy thử viết lại phần đó với cấu trúc đơn giản hơn. Nếu bạn nghi ngờ một chức năng lớn, hãy thử chia nó thành các chức năng nhỏ hơn và kiểm tra chúng một cách riêng biệt Thường thì quá trình tìm trường hợp kiểm thử tối thiểu sẽ dẫn bạn đến lỗi. Nếu bạn thấy rằng một chương trình hoạt động trong tình huống này nhưng không hoạt động trong tình huống khác, điều đó sẽ cho bạn manh mối về những gì đang diễn ra Tương tự, viết lại một đoạn mã có thể giúp bạn tìm ra các lỗi tinh vi. Nếu bạn thực hiện một thay đổi mà bạn cho rằng không ảnh hưởng đến chương trình và nó có ảnh hưởng, điều đó có thể khiến bạn thất vọng Bạn cũng có thể gói các câu lệnh in gỡ lỗi của mình trong một số điều kiện để bạn loại bỏ phần lớn đầu ra. Ví dụ: nếu bạn đang cố gắng tìm một phần tử bằng cách sử dụng tìm kiếm nhị phân và nó không hoạt động, bạn có thể mã hóa một câu lệnh in gỡ lỗi bên trong câu lệnh có điều kiện. nếu phạm vi của các phần tử ứng viên nhỏ hơn 6 thì in thông tin gỡ lỗi, nếu không thì không in Tương tự như vậy, các điểm dừng có thể được thực hiện có điều kiện. bạn có thể đặt điểm ngắt trên một câu lệnh, sau đó chỉnh sửa điểm dừng thành "chỉ ngắt nếu biểu thức này trở thành đúng" lỗi ngữ nghĩaTheo một số cách, lỗi ngữ nghĩa là lỗi khó gỡ lỗi nhất, bởi vì trình biên dịch và hệ thống thời gian chạy không cung cấp thông tin về những gì sai. Chỉ bạn biết chương trình phải làm gì và chỉ bạn biết rằng nó không làm việc đó Bước đầu tiên là tạo mối liên hệ giữa văn bản chương trình và hành vi bạn đang thấy. Bạn cần một giả thuyết về những gì chương trình đang thực sự làm. Một trong những điều gây khó khăn là máy tính chạy quá nhanh Bạn sẽ thường ước rằng mình có thể làm chậm chương trình xuống bằng tốc độ của con người và với một số trình gỡ lỗi, bạn có thể. Nhưng thời gian cần thiết để chèn một vài câu lệnh in được đặt đúng vị trí thường ngắn so với việc thiết lập trình gỡ lỗi, chèn và xóa các điểm ngắt cũng như thực hiện . Chương trình của tôi không hoạt độngBạn nên tự hỏi mình những câu hỏi này
Để lập trình, bạn cần phải có một mô hình tinh thần về cách các chương trình hoạt động. Nếu bạn viết một chương trình không thực hiện được những gì bạn mong đợi, thì thường thì vấn đề không nằm ở chương trình; Cách tốt nhất để sửa mô hình tinh thần của bạn là chia chương trình thành các thành phần của nó (thường là các hàm và phương thức) và kiểm tra từng thành phần một cách độc lập. Khi bạn tìm thấy sự khác biệt giữa mô hình của mình và thực tế, bạn có thể giải quyết vấn đề Tất nhiên, bạn nên xây dựng và thử nghiệm các thành phần khi bạn phát triển chương trình. Nếu bạn gặp sự cố, chỉ nên có một lượng nhỏ mã mới không biết chính xác Tôi có một biểu hiện nhiều lông và nó không hoạt động như những gì tôi mong đợiViết các biểu thức phức tạp miễn là chúng có thể đọc được, nhưng chúng có thể khó gỡ lỗi. Việc chia một biểu thức phức tạp thành một loạt các phép gán cho các biến tạm thời thường là một ý kiến hay. Ví dụ 1self.hands[i].add_card(self.hands[self.find_neighbor(i)].pop_card()) Điều này có thể được viết lại như 1 2 3neighbor = self.find_neighbor (i) picked_card = self.hands[neighbor].pop_card() self.hands[i].add_card(picked_card) Phiên bản rõ ràng dễ đọc hơn vì tên biến cung cấp tài liệu bổ sung và dễ gỡ lỗi hơn vì bạn có thể kiểm tra loại biến trung gian và hiển thị hoặc kiểm tra giá trị của chúng Một vấn đề khác có thể xảy ra với các biểu thức lớn là thứ tự đánh giá có thể không như bạn mong đợi. Ví dụ: nếu bạn đang dịch biểu thức x/2pi sang Python, bạn có thể viết. y = x / 2 * math.pi Điều đó không đúng vì phép nhân và phép chia có cùng mức độ ưu tiên và được tính từ trái sang phải. Vậy biểu thức này tính (x/2)pi . Một cách hay để gỡ lỗi các biểu thức là thêm dấu ngoặc đơn để làm rõ thứ tự đánh giá y = x / (2 * math.pi) Bất cứ khi nào bạn không chắc chắn về thứ tự đánh giá, hãy sử dụng dấu ngoặc đơn. Chương trình không chỉ chính xác (theo nghĩa là làm những gì bạn dự định), nó còn dễ đọc hơn đối với những người khác chưa ghi nhớ các quy tắc ưu tiên Tôi có một hàm hoặc phương thức không trả về những gì tôi mong đợiNếu bạn có câu lệnh return với một biểu thức phức tạp, bạn sẽ không có cơ hội in câu lệnh return value before returning. Again, you can use a temporary variable. For example, instead of:
bạn có thể viết count = self.hands[i].remove_matches() return count Bây giờ bạn có cơ hội hiển thị hoặc kiểm tra giá trị của count trước khi quay lại. Tôi thực sự, thực sự bế tắc và tôi cần sự giúp đỡTrước tiên, hãy thử rời khỏi máy tính trong vài phút. Máy tính phát ra sóng ảnh hưởng đến não, gây ra những hiệu ứng này
Nếu bạn thấy mình mắc bất kỳ triệu chứng nào trong số này, hãy đứng dậy và đi dạo. Khi bạn bình tĩnh, hãy nghĩ về chương trình. Nó đang làm gì vậy? Đôi khi chỉ mất thời gian để tìm ra một lỗi. Chúng ta thường tìm thấy lỗi khi rời xa máy tính và để đầu óc lang thang. Một số nơi tốt nhất để tìm bọ là tàu hỏa, phòng tắm và trên giường, ngay trước khi bạn chìm vào giấc ngủ Không, tôi thực sự cần giúp đỡNó xảy ra. Ngay cả những lập trình viên giỏi nhất cũng thỉnh thoảng gặp khó khăn. Đôi khi bạn làm việc trên một chương trình lâu đến nỗi bạn không thể nhìn thấy lỗi. Một đôi mắt mới chỉ là điều Trước khi bạn đưa người khác vào, hãy đảm bảo rằng bạn đã sử dụng hết các kỹ thuật được mô tả tại đây. Chương trình của bạn phải càng đơn giản càng tốt và bạn nên xử lý đầu vào nhỏ nhất gây ra lỗi. Bạn nên có các câu lệnh in ở những vị trí thích hợp (và đầu ra mà chúng tạo ra phải dễ hiểu). Bạn nên hiểu vấn đề đủ rõ để mô tả nó một cách ngắn gọn. Khi bạn nhờ ai đó giúp đỡ, hãy đảm bảo cung cấp cho họ thông tin họ cần
Những người hướng dẫn và giúp đỡ tốt cũng sẽ làm điều gì đó không nên xúc phạm bạn. họ sẽ không tin khi bạn nói với họ “Tôi chắc chắn rằng tất cả quy trình nhập liệu đều hoạt động tốt và tôi đã thiết lập dữ liệu chính xác. ”. Họ sẽ muốn tự xác thực và kiểm tra mọi thứ. Rốt cuộc, chương trình của bạn có lỗi. Sự hiểu biết và kiểm tra mã của bạn vẫn chưa tìm thấy nó. Vì vậy, bạn nên mong đợi các giả định của mình bị thách thức. Và khi bạn đạt được các kỹ năng và giúp đỡ người khác, bạn sẽ cần phải làm điều tương tự cho họ Khi bạn tìm thấy lỗi, hãy dành một giây để suy nghĩ xem bạn có thể làm gì để tìm ra lỗi đó nhanh hơn. Lần tới khi bạn thấy điều gì đó tương tự, bạn sẽ có thể tìm thấy lỗi nhanh hơn Hãy nhớ rằng, mục tiêu không chỉ là làm cho chương trình hoạt động. Mục tiêu là học cách làm cho chương trình hoạt động 3 loại lỗi chúng ta thường cần gỡ lỗi là gì?Vì những lý do bất thường, lỗi lập trình được gọi là lỗi và quá trình theo dõi chúng được gọi là gỡ lỗi. Ba loại lỗi có thể xảy ra trong một chương trình. lỗi cú pháp, lỗi thời gian chạy và lỗi ngữ nghĩa . Thật hữu ích khi phân biệt giữa chúng để theo dõi chúng nhanh hơn.
3 loại lỗi trong Python là gì?Có ba loại lỗi chính có thể phân biệt được trong Python. lỗi cú pháp, ngoại lệ và lỗi logic .
Gỡ lỗi và các loại lỗi trong Python là gì?Lỗi xảy ra trong lập trình được gọi là bug. Quá trình theo dõi lỗi này được gọi là gỡ lỗi. Có ba loại lỗi có thể xảy ra trong khi viết mã. Lỗi cú pháp, Lỗi thời gian chạy và Lỗi ngữ nghĩa .
Một số loại lỗi bạn có thể gặp phải trong Python là gì?Trong python có ba loại lỗi; . syntax errors, logic errors and exceptions. |