2010-09-22 17 views
16

tôi thấy sai lầm sau trong mã của tôi trong tuần này:Có công cụ nào có thể phát hiện lỗi như thế này không?

import datetime 

d = datetime.date(2010,9,24) 
if d.isoweekday == 5: 
    pass 

Có, nó phải là d.isoweekday() để thay thế.

Tôi biết, nếu tôi đã có một trường hợp thử nghiệm cho điều này, tôi đã được lưu lại. So sánh một hàm với 5 không phải là rất hữu ích. Ồ, tôi không đổ lỗi cho Python vì điều này.

Câu hỏi của tôi: Có các công cụ có thể phát hiện lỗi như thế này không?

+3

"nếu tôi đã có một trường hợp thử nghiệm cho điều này". Đó không phải là câu trả lời cho câu hỏi của bạn sao? "Viết một bài kiểm tra đơn vị." –

+0

@ S.Lott Tôi tự đề cập đến câu trả lời này. Vì vậy, không. :) –

+0

Bạn đang thiếu điểm. Cho (a) sự vắng mặt của một bài kiểm tra và (b) các câu trả lời mà bạn có, bạn sẽ phải bắt đầu viết các bài kiểm tra. –

Trả lời

7

Là một thay thế, hầu hết các dự án Python là đơn vị thử nghiệm và hệ thống kiểm tra. Nếu bạn có cả hai (hoặc thậm chí chỉ đơn vị kiểm tra), bạn sẽ tìm thấy vấn đề của bạn cùng với khá nhiều bất kỳ vấn đề khác.

dekomote cho biết, điều này có giá trị pháp lý. Python là không phải được nhập tĩnh nên không thể phát hiện lỗi này. Tối đa nó có thể là một cảnh báo.

EDIT: Python được nhập mạnh chỉ loại được chọn vào thời gian chạy.

+1

-1 python được nhập mạnh mẽ. Nó không được gõ _statically_. Đây không phải là một sự phân biệt nhỏ. Hơn nữa, nó thậm chí không nên là một cảnh báo bởi vì so sánh là hoàn toàn hợp lệ. – aaronasterling

+0

Cảm ơn bạn đã sửa. Vâng, nó không thay đổi nhiều trừ khi một công cụ có khả năng mô phỏng thực thi mà không cần chạy chương trình. Khác nó chỉ có thể là một đoán. – Wernight

+0

+1 để trở thành người duy nhất trong câu trả lời đề xuất thử nghiệm đơn vị (S. Lott là trên nó trong các ý kiến) – aaronasterling

3

Kiểm tra pylint nó có thể nhận được điều đó. Nó tìm thấy nhiều lỗi.

+2

Nó sẽ không tìm thấy lỗi này. – dekomote

+0

Cũng không phải [pychecker] (http://pychecker.sourceforge.net/). –

+2

Đó là vì không có lỗi ở đây. d.isoweekday == 5 là một câu lệnh hợp lệ. – dekomote

3

Vâng, đây không phải là lỗi trong python per se vì trong Python, các hàm là đối tượng có thể gọi. Bạn có thể làm cho bất kỳ đối tượng nào có thể gọi được bằng cách thực hiện __call__. Vì vậy, d.isoweekday == 5 là câu lệnh hợp lệ. Điều này sẽ là Sai.

Đối với các lỗi khác, tôi khuyên bạn nên xem pyflakes - http://divmod.org/trac/wiki/DivmodPyflakes

Các vấn đề liên quan