Hướng dẫn traceback python - con trăn theo dõi
Mục lục bài viết:
Show
Python in một dấu vết khi một ngoại lệ được đưa ra trong mã của bạn. Đầu ra theo dõi có thể hơi choáng ngợp nếu bạn nhìn thấy nó lần đầu tiên hoặc bạn không biết nó nói gì với bạn. Nhưng theo dõi Python có rất nhiều thông tin có thể giúp bạn chẩn đoán và khắc phục lý do ngoại lệ được nêu ra trong mã của bạn. Hiểu được thông tin mà một truy nguyên Python cung cấp là rất quan trọng để trở thành một lập trình viên Python tốt hơn. Đến cuối hướng dẫn này, bạn sẽ có thể:
Traceback Python là gì?Làm thế nào để bạn đọc một Traceback Python? Tổng quan về truy nguyên Python
Hướng dẫn theo dõi cụ thể Một số dấu vết thường gặp trong Python là gì? AttributeError
ImportError IndexError KeyError Làm thế nào để bạn đọc một Traceback Python?Tổng quan về truy nguyên Python Tổng quan về truy nguyên PythonHướng dẫn theo dõi cụ thể Một số dấu vết thường gặp trong Python là gì?
NameError Lỗi cú pháp
TypeError ValueError Nó đã được nói rồi, nhưng chỉ cần nhắc lại, một truy nguyên Python nên được đọc từ dưới lên trên. Điều này rất hữu ích vì bản ghi lại được in ra và thiết bị đầu cuối của bạn (hoặc bất cứ nơi nào bạn đang đọc bản ghi lại) thường kết thúc ở cuối đầu ra, cho bạn một nơi hoàn hảo để bắt đầu đọc bản ghi lại. Hướng dẫn theo dõi cụ thểXem qua một số kết quả theo dõi cụ thể sẽ giúp bạn hiểu rõ hơn và xem thông tin mà truy xuất nguồn gốc sẽ cung cấp cho bạn. Đoạn mã dưới đây được sử dụng trong các ví dụ sau để minh họa thông tin mà truy nguyên Python cung cấp cho bạn:
Ở đây, 7nhận một giá trị 8và trả về giá trị đó hoặc nhắc giá trị trả về thay thế.Sau đó, 8lấy một cái tên để chào, 9một 1giá trị tùy chọn và gọi 2. 7cũng được gọi với 9giá trị được truyền vào.Cuối cùng, 5sẽ lặp lại danh sách 6và gọi 8. Nếu có một ngoại lệ được nêu ra bằng cách gọi 8, thì một lời chào dự phòng đơn giản sẽ được in.Mã này không có bất kỳ lỗi nào dẫn đến ngoại lệ được đưa ra miễn là đầu vào phù hợp được cung cấp. Nếu bạn thêm một lệnh gọi vào 8cuối 0và chỉ định một đối số từ khóa mà nó không mong đợi (ví dụ 1), thì bạn sẽ nhận được dấu vết sau:
Một lần nữa, với truy nguyên Python, tốt nhất là làm việc lùi lại, tăng đầu ra. Bắt đầu từ dòng cuối cùng của quá trình theo dõi, bạn có thể thấy rằng ngoại lệ là a 2. Các thông báo theo sau loại ngoại lệ, mọi thứ sau dấu hai chấm, cung cấp cho bạn một số thông tin tuyệt vời. Nó cho bạn biết rằng nó 8đã được gọi với một đối số từ khóa mà nó không mong đợi. Tên tham số chưa biết cũng được trao cho bạn: 4.Di chuyển lên trên, bạn có thể thấy dòng dẫn đến ngoại lệ. Trong trường hợp này, đó là lệnh 8gọi mà chúng tôi đã thêm vào cuối 0.Dòng tiếp theo cung cấp cho bạn đường dẫn đến tệp có mã tồn tại, số dòng của tệp đó nơi mã có thể được tìm thấy và mô-đun đó nằm trong mô-đun nào. Trong trường hợp này, vì mã của chúng tôi không sử dụng bất kỳ mô-đun Python nào khác , chúng ta chỉ thấy 7ở đây, nghĩa là đây là tệp đang được thực thi.Với một tệp khác và thông tin đầu vào khác, bạn có thể thấy bản truy xuất thực sự chỉ cho bạn đúng hướng để tìm ra vấn đề. Nếu bạn đang theo dõi, hãy xóa 8cuộc gọi lỗi ở cuối 0và thêm tệp sau vào thư mục của bạn:
Tại đây, bạn đã thiết lập một tệp Python khác đang nhập mô-đun trước đó của bạn 0và sử dụng 8từ nó. Đây là những gì sẽ xảy ra nếu bây giờ bạn chạy 2:
Ngoại lệ được nêu ra trong trường hợp này là một 2lần nữa, nhưng lần này thông báo ít hữu ích hơn một chút. Nó cho bạn biết rằng một nơi nào đó trong mã mà nó mong đợi hoạt động với một chuỗi, nhưng một số nguyên đã được đưa ra.Di chuyển lên trên, bạn sẽ thấy dòng mã đã được thực thi. Sau đó, tệp và số dòng của mã. Tuy nhiên, lần này, thay vì 7, chúng ta nhận được tên của hàm đang được thực thi 8,.Chuyển đến dòng mã được thực thi tiếp theo, chúng tôi thấy 8lệnh gọi có vấn đề của chúng tôi được chuyển vào một số nguyên.Đôi khi sau khi một ngoại lệ được nâng lên, một đoạn mã khác sẽ bắt được ngoại lệ đó và cũng dẫn đến một ngoại lệ. Trong những tình huống này, Python sẽ xuất ra tất cả các truy nguyên ngoại lệ theo thứ tự mà chúng đã được nhận, một lần nữa kết thúc trong lần truy xuất lại ngoại lệ nâng cao gần đây nhất. Vì điều này có thể hơi khó hiểu, đây là một ví dụ. Thêm cuộc gọi vào 5cuối 0:
Điều này sẽ dẫn đến việc in lời chúc mừng cho cả ba người. Tuy nhiên, nếu bạn chạy mã này, bạn sẽ thấy một ví dụ về nhiều dấu vết được xuất ra:
Lưu ý dòng được đánh dấu bắt đầu bằng 9trong đầu ra ở trên. Ở giữa tất cả các lần theo dõi, bạn sẽ thấy dòng này. Thông điệp của nó rất rõ ràng, trong khi mã của bạn đang cố gắng xử lý ngoại lệ trước đó, một ngoại lệ khác đã được nêu ra.Lưu ý : Tính năng hiển thị theo dõi ngoại lệ trước đó của Python đã được thêm vào trong Python 3. Trong Python 2, bạn sẽ chỉ nhận được dấu vết của ngoại lệ cuối cùng. Bạn đã từng thấy ngoại lệ trước đó, khi bạn gọi 8với một số nguyên. Vì chúng tôi đã thêm một 1người vào danh sách những người cần chào hỏi, chúng tôi có thể mong đợi kết quả tương tự. Tuy nhiên, hàm 5kết thúc 8cuộc gọi trong một 4và 5khối. Chỉ trong trường hợp 8dẫn đến một ngoại lệ được nêu ra, 5muốn in một lời chào mặc định.Phần liên quan của 0được lặp lại ở đây:
Vì vậy, khi 8kết quả là 2do đầu vào số nguyên 5không hợp lệ , hãy xử lý ngoại lệ đó và cố gắng in một lời chào đơn giản. Ở đây mã kết thúc dẫn đến một ngoại lệ khác, tương tự, ngoại lệ. Nó vẫn đang cố gắng thêm một chuỗi và một số nguyên.Xem tất cả đầu ra theo dõi có thể giúp bạn biết đâu có thể là nguyên nhân thực sự của một ngoại lệ. Đôi khi khi bạn thấy ngoại lệ cuối cùng được đưa ra và kết quả là quá trình truy nguyên của nó, bạn vẫn không thể thấy điều gì sai. Trong những trường hợp đó, chuyển sang các trường hợp ngoại lệ trước đó thường giúp bạn biết rõ hơn về nguyên nhân gốc rễ. Một số dấu vết thường gặp trong Python là gì?Biết cách đọc một truy nguyên Python khi chương trình của bạn tạo ra một ngoại lệ có thể rất hữu ích khi bạn đang lập trình, nhưng biết một số truy nguyên phổ biến hơn cũng có thể tăng tốc quá trình của bạn. Dưới đây là một số trường hợp ngoại lệ phổ biến mà bạn có thể gặp phải, lý do chúng được nêu ra và ý nghĩa của chúng cũng như thông tin bạn có thể tìm thấy trong phần truy nguyên của chúng. $ python greetings.py
Hello, Chad
Hello, Dan
Traceback (most recent call last):
File "greetings.py", line 10, in greet_many
greet(person)
File "greetings.py", line 5, in greet
print(greeting + ', ' + who_to_greet(someone))
TypeError: must be str, not int
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "greetings.py", line 14, in |