Tôi chỉ kết hợp trường hợp repro "tối thiểu" sau đây (tối thiểu trong dấu ngoặc kép vì tôi muốn đảm bảo pylint
không có lỗi, cảnh báo, gợi ý hoặc đề xuất nào khác - có nghĩa là có một chút luồn lách):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Khi tôi chạy pylint
mã này ( pylint pylint_error.py
) tôi nhận được đầu ra sau:
$> pylint pylint_error.py
************* Module pylint_error
pylint_error.py:13:10: E1136: Value 'test.shape' is unsubscriptable (unsubscriptable-object)
------------------------------------------------------------------
Your code has been rated at 1.67/10 (previous run: 1.67/10, +0.00)
Nó tuyên bố rằng test.shape
không thể đăng ký, mặc dù nó khá rõ ràng. Khi tôi chạy mã, nó hoạt động tốt:
$> python pylint_error.py
1
Vì vậy, những gì gây ra pylint
trở nên bối rối, và làm thế nào tôi có thể sửa chữa nó?
Một số lưu ý bổ sung:
- Nếu tôi khai báo kiểm tra
np.arange(1)
thì lỗi sẽ biến mất - Nếu tôi tuyên bố thử nghiệm như
np.zeros(1)
,np.zeros((1))
,np.ones(1)
, haynp.ones((1))
lỗi nào không đi - Nếu tôi khai báo kiểm tra
np.full((1), 1)
thì lỗi sẽ biến mất - Chỉ định loại (
test: np.ndarray = np.array([1])
) không sửa lỗi - Chỉ định một
dtype
(np.array([1], dtype=np.uint8)
) không sửa lỗi - Lấy một lát kiểm tra (
test[:].shape
) làm cho lỗi biến mất
Bản năng đầu tiên của tôi nói rằng hành vi không nhất quán với các NumPY
phương pháp khác nhau ( arange
vs zeros
vs full
, v.v.) cho thấy đó chỉ là một lỗi trong NumPY
. Tuy nhiên, có thể có một số khái niệm cơ bản cho NumPY
rằng tôi đang hiểu lầm. Tôi muốn chắc chắn rằng tôi không viết mã với hành vi không xác định chỉ hoạt động tình cờ.
pylint
trước đâynumpy