Truy nguyên (cuộc gọi gần đây nhất) python
Mọi lập trình viên đều gặp phải lỗi, cả những người mới bắt đầu và những người đã lập trình trong nhiều năm. Đôi khi gặp lỗi và ngoại lệ có thể rất khó chịu và có thể khiến việc viết mã giống như một nỗ lực vô vọng. Tuy nhiên, hiểu được các loại lỗi khác nhau là gì và khi nào bạn có thể gặp phải chúng có thể giúp ích rất nhiều. Khi bạn biết lý do tại sao bạn gặp phải một số loại lỗi nhất định, chúng sẽ trở nên dễ sửa hơn nhiều Show mục tiêu
Giải phẫu của một lỗiLỗi trong Python có một dạng rất cụ thể, được gọi là dấu vết. Hãy kiểm tra một
Tracback cụ thể này có hai cấp độ. Bạn có thể xác định số cấp độ bằng cách tìm số mũi tên ở phía bên tay trái. Trong trường hợp này
Cấp độ cuối cùng là nơi thực sự xảy ra lỗi. (Các) cấp độ khác cho biết chương trình đã thực hiện chức năng nào để xuống cấp độ tiếp theo. Vì vậy, trong trường hợp này, trước tiên chương trình thực hiện lệnh gọi hàm tới hàm 0. Bên trong chức năng này, chương trình đã gặp lỗi ở Dòng 7, khi nó cố chạy mã 2
Vậy thực sự chương trình đã gặp phải lỗi gì? Nếu bạn gặp lỗi và không biết nó có nghĩa là gì, điều quan trọng vẫn là đọc kỹ phần truy nguyên. Bằng cách đó, nếu bạn sửa lỗi nhưng gặp một lỗi mới, bạn có thể biết rằng lỗi đã thay đổi. Ngoài ra, đôi khi chỉ cần biết lỗi xảy ra ở đâu là đủ để sửa lỗi, ngay cả khi bạn không hoàn toàn hiểu thông báo Nếu bạn gặp lỗi mà bạn không nhận ra, hãy thử xem tài liệu chính thức về lỗi. Tuy nhiên, lưu ý rằng không phải lúc nào bạn cũng có thể tìm thấy lỗi ở đó, vì có thể tạo lỗi tùy chỉnh. Trong trường hợp đó, hy vọng thông báo lỗi tùy chỉnh đủ thông tin để giúp bạn tìm ra lỗi đã xảy ra Thách đấu. đọc thông báo lỗiĐọc truy nguyên bên dưới và xác định các mẩu thông tin sau về nó
5
Lỗi cú phápKhi bạn quên dấu hai chấm ở cuối dòng, vô tình thêm quá nhiều khoảng trắng khi thụt lề dưới câu lệnh 6 hoặc quên dấu ngoặc đơn, bạn sẽ gặp lỗi cú pháp. Điều này có nghĩa là Python không thể tìm ra cách đọc chương trình của bạn. Điều này tương tự như quên dấu câu trong tiếng Anh
Mọi người thường có thể tìm ra ý nghĩa của văn bản mà không có dấu chấm câu, nhưng mọi người thông minh hơn nhiều so với máy tính. Nếu Python không biết cách đọc chương trình, nó sẽ bỏ cuộc và báo lỗi cho bạn. Ví dụ
9Ở đây, Python cho chúng ta biết rằng có một 3 trên dòng 1, và thậm chí còn đặt một mũi tên nhỏ ở nơi có vấn đề. Trong trường hợp này, vấn đề là định nghĩa hàm bị thiếu dấu hai chấm ở cuốiTrên thực tế, chức năng trên có hai vấn đề với cú pháp. Nếu chúng ta khắc phục sự cố với dấu hai chấm, chúng ta sẽ thấy rằng cũng có một 4, có nghĩa là các dòng trong định nghĩa hàm không phải tất cả đều có cùng một vết lõm 2 3Cả 3 và 4 đều chỉ ra vấn đề với cú pháp chương trình của bạn, nhưng 4 cụ thể hơn. điều đó luôn có nghĩa là có vấn đề với cách mã của bạn được thụt vàoKhoảng trắng. tab và không gianGhi chú nhanh về lỗi thụt lề. đôi khi chúng có thể ngấm ngầm, đặc biệt nếu bạn đang trộn dấu cách và tab. Vì cả hai đều là "khoảng trắng" nên rất khó để phân biệt bằng mắt thường. Sổ tay IPython thực sự cung cấp cho chúng ta một chút gợi ý, nhưng không phải trình soạn thảo Python nào cũng làm được điều đó. Trong ví dụ sau, hai dòng đầu tiên đang sử dụng tab để thụt lề, trong khi dòng thứ ba sử dụng bốn khoảng trắng 7 8Theo mặc định, một tab tương đương với tám dấu cách, vì vậy cách duy nhất để trộn các tab và dấu cách là làm cho nó trông như thế này. Nói chung, tốt hơn là không bao giờ sử dụng các tab và luôn sử dụng khoảng trắng, vì nó có thể khiến mọi thứ trở nên rất khó hiểu 0Thách đấu. xác định lỗi cú pháp
1Lỗi tên biếnMột loại lỗi rất phổ biến khác được gọi là 5 và xảy ra khi bạn cố gắng sử dụng một biến không tồn tại. Ví dụ 2 3Lỗi tên biến đi kèm với một số thông báo lỗi thông tin nhất, thường có dạng "tên 'tên_biến' không được xác định" Tại sao thông báo lỗi này xảy ra? . Tuy nhiên, có một vài lý do rất phổ biến khiến bạn có thể có một biến không xác định. Đầu tiên là bạn muốn sử dụng một chuỗi, nhưng quên đặt dấu ngoặc kép xung quanh nó 4 5Thứ hai là bạn quên tạo biến trước khi sử dụng nó. Trong ví dụ sau, lẽ ra 95 phải được xác định (e. g. , với 96) trước vòng lặp for 6 7Cuối cùng, khả năng thứ ba là bạn đã mắc lỗi đánh máy khi viết mã. Giả sử chúng ta đã sửa lỗi ở trên bằng cách thêm dòng 97 trước vòng lặp for. Bực bội, điều này thực sự không sửa lỗi. Hãy nhớ rằng các biến phân biệt chữ hoa chữ thường, vì vậy biến 95 khác với biến 99. Chúng tôi vẫn gặp lỗi tương tự vì chúng tôi vẫn chưa xác định 95 8 9Thách đấu. xác định lỗi tên biến
50Lỗi mặt hàngTiếp theo là các lỗi liên quan đến vùng chứa (như danh sách và từ điển) và các mục bên trong chúng. Nếu bạn cố gắng truy cập một mục trong danh sách hoặc từ điển không tồn tại, thì bạn sẽ gặp lỗi. Điều này thật ý nghĩa. Hãy suy nghĩ về một ví dụ thực tế cuộc sống. nếu bạn hỏi ai đó muốn uống cà phê vào ngày nào và họ trả lời là "thứ bảy", bạn có thể hơi khó chịu (mặc dù, có lẽ sau khi cảm thấy thích thú khi ai đó nghĩ ra ý tưởng về thứ bảy). Python cũng khó chịu tương tự nếu bạn cố hỏi nó về một mục không tồn tại 51 52 53Ở đây, Python đang nói với chúng ta rằng có một 7 trong mã của chúng ta, nghĩa là chúng ta đã cố truy cập vào một chỉ mục danh sách không tồn tạiChúng tôi gặp lỗi tương tự trong trường hợp từ điển 54 55Trong trường hợp này, chúng tôi nhận được một 6, có nghĩa là khóa mà chúng tôi đã yêu cầu ( 24, như thông báo lỗi cho chúng tôi biết) không có trong từ điển. Điều này có thể là do nó thực sự không tồn tại trong từ điển, nhưng cũng có thể là do lỗi đánh máy. Điều này tương tự như trường hợp chúng tôi đã thảo luận ở trên, đôi khi bạn có thể nhận được 5 do lỗi đánh máy. Ví dụ 56 57Thách đấu. xác định lỗi mục
58Lỗi tệpLoại lỗi cuối cùng chúng tôi sẽ đề cập hôm nay là những lỗi liên quan đến việc đọc và ghi tệp. 8. "IO" trong 8 là viết tắt của "input/output", đây chỉ là một cách nói thú vị của "viết/đọc"Nếu bạn cố đọc một tệp không tồn tại, bạn sẽ nhận được thông báo ________ 08 cho bạn biết như vậy. Đây là lý do phổ biến nhất khiến bạn nhận được 8 và nếu thông báo lỗi cho biết "không có tệp hoặc thư mục như vậy", thì bạn biết mình vừa cố truy cập một tệp không tồn tại 59 0Một lý do khiến bạn nhận được lỗi này là do bạn đã chỉ định đường dẫn đến tệp không chính xác. Ví dụ: nếu tôi hiện đang ở trong một thư mục có tên là 32 và tôi có một tệp trong 33, nhưng tôi cố gắng chỉ mở 34, thao tác này sẽ không thành công. Đường dẫn chính xác sẽ là 35. Cũng có thể (như với 5 và 6) bạn vừa mắc lỗi đánh máyMột vấn đề khác có thể là bạn đã sử dụng cờ "đọc" thay vì cờ "ghi". Python sẽ không báo lỗi cho bạn nếu bạn cố mở tệp để ghi khi tệp không tồn tại. Tuy nhiên, nếu bạn định mở một tệp để đọc, nhưng lại vô tình mở tệp đó để ghi và sau đó cố đọc từ tệp đó, bạn sẽ gặp lỗi thông báo rằng tệp không được mở để đọc Tại sao tôi gặp lỗi truy nguyên trong Python?Dòng thông báo lỗi của truy nguyên NameError cung cấp cho bạn tên bị thiếu. Trong ví dụ trên, đó là một biến sai chính tả hoặc tham số của hàm được truyền vào .
Là truy nguyên một ngoại lệ?Truy xuất ngược là theo dõi ngăn xếp từ điểm của trình xử lý ngoại lệ trong chuỗi cuộc gọi đến điểm mà ngoại lệ được đưa ra . Bạn cũng có thể làm việc với ngăn xếp lệnh gọi hiện tại từ điểm gọi (và không có ngữ cảnh lỗi), điều này rất hữu ích để tìm ra các đường dẫn được theo dõi trong một chức năng.
Các lỗi truy nguyên phổ biến trong Python là gì?Một số lỗi truy nguyên phổ biến là. Lỗi phím . TypeError . valueError . Lỗi nhập /ModuleNotFound . |