quên để kiểm tra một loại
Điều này không có ý nghĩa nhiều. Bạn hiếm khi cần phải "kiểm tra" một loại. Bạn chỉ cần chạy thử nghiệm đơn vị và nếu bạn đã cung cấp đối tượng loại sai, mọi thứ sẽ thất bại. Bạn không bao giờ cần phải "kiểm tra" nhiều, theo kinh nghiệm của tôi.
cố gắng gọi thuộc tính và nhận loại NoneType (hoặc bất kỳ khác) không có thuộc tính x lỗi.
Bất ngờ None
là lỗi cũ. 80% thời gian, tôi bỏ qua số return
. Các bài kiểm tra đơn vị luôn tiết lộ những điều này.
Trong số những người còn lại, 80% thời gian, chúng là lỗi cũ đơn giản do "lối ra sớm" trả về None
vì ai đó đã viết tuyên bố return
chưa hoàn chỉnh. Các cấu trúc if foo: return
này dễ phát hiện với các bài kiểm tra đơn vị. Trong một số trường hợp, chúng phải là if foo: return somethingMeaningful
và trong các trường hợp khác, chúng phải là if foo: raise Exception("Foo")
.
Phần còn lại là những sai lầm ngớ ngẩn khi hiểu sai về API. Nói chung, các hàm mutator không trả về bất cứ thứ gì. Đôi khi tôi quên. Kiểm tra đơn vị tìm thấy những điều này một cách nhanh chóng, vì về cơ bản, không có gì hoạt động đúng.
Điều đó bao gồm các trường hợp "bất ngờ None
" khá chắc chắn. Dễ dàng để kiểm tra đơn vị cho. Hầu hết các sai lầm liên quan đến các bài kiểm tra khá nhỏ nhặt để viết cho một số lỗi khá rõ ràng của các sai lầm: sai trở lại; không nêu ra một ngoại lệ.
Lỗi "không có thuộc tính X" khác là những sai lầm thực sự hoang dã khi sử dụng loại sai hoàn toàn. Đó là một trong hai câu lệnh chuyển nhượng thực sự sai hoặc các cuộc gọi hàm (hoặc phương thức) thực sự sai. Chúng luôn thất bại một cách công phu trong quá trình thử nghiệm đơn vị, đòi hỏi rất ít nỗ lực để sửa chữa.
Rất nhiều trong số đó là vô hại nhưng nếu không được xử lý đúng cách, chúng có thể giảm toàn bộ ứng dụng/quy trình/v.v.
Um ... Vô hại? Nếu đó là một lỗi, tôi cầu nguyện rằng nó mang xuống toàn bộ ứng dụng của tôi càng nhanh càng tốt để tôi có thể tìm thấy nó. Một lỗi không làm hỏng ứng dụng của tôi là tình huống khủng khiếp nhất có thể tưởng tượng được. "Vô hại" không phải là một từ tôi muốn sử dụng cho một lỗi mà không sụp đổ ứng dụng của tôi.
Ngoài ra, hãy xem http://stackoverflow.com/questions/2014105/null-pattern-in-python-underused – voyager
"NoneType không có thuộc tính x" giống như một NullPointerException trong Java. Nó không phải là một vấn đề gõ động và tĩnh. – FogleBird
@FogleBird: nhưng Python cho phép nhiều hơn * trí tưởng tượng * giải pháp;) – voyager