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 pylintkhô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 pylintmã 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.shapekhô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 pylinttrở 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 NumPYphương pháp khác nhau ( arangevs zerosvs 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 NumPYrằ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ờ.
pylinttrước đâynumpy