ฉันเพิ่งรวบรวมกรณีการทำซ้ำ "ขั้นต่ำ" ต่อไปนี้ (ขั้นต่ำในเครื่องหมายคำพูดเพราะฉันต้องการให้แน่ใจว่าจะpylint
ไม่มีข้อผิดพลาดคำเตือนคำแนะนำหรือข้อเสนอแนะอื่น ๆ - รวมถึงความหมายของแผ่นสำเร็จรูป):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
เมื่อฉันใช้pylint
รหัสนี้ ( pylint pylint_error.py
) ฉันจะได้ผลลัพธ์ต่อไปนี้:
$> 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)
มันอ้างว่าtest.shape
ไม่สามารถถอดได้แม้ว่ามันจะค่อนข้างชัดเจนก็ตาม เมื่อฉันเรียกใช้รหัสมันใช้ได้ดี:
$> python pylint_error.py
1
ดังนั้นสิ่งที่ทำให้เกิดpylint
ความสับสนและฉันจะแก้ไขได้อย่างไร
หมายเหตุเพิ่มเติมบางส่วน:
- ถ้าฉันประกาศทดสอบ
np.arange(1)
ข้อผิดพลาดจะหายไป - ถ้าผมประกาศการทดสอบเป็น
np.zeros(1)
,np.zeros((1))
,np.ones(1)
หรือnp.ones((1))
ข้อผิดพลาดไม่ได้หายไป - ถ้าฉันประกาศทดสอบ
np.full((1), 1)
ข้อผิดพลาดจะหายไป - การระบุประเภท (
test: np.ndarray = np.array([1])
) ไม่สามารถแก้ไขข้อผิดพลาดได้ - การระบุ
dtype
(np.array([1], dtype=np.uint8)
) ไม่สามารถแก้ไขข้อผิดพลาดได้ - การทำการทดสอบ (
test[:].shape
) ทำให้ข้อผิดพลาดหายไป
สัญชาตญาณแรกของฉันบอกว่าพฤติกรรมต่างๆที่ไม่สอดคล้องกับNumPY
วิธีการ ( arange
VS zeros
VS full
ฯลฯ ) NumPY
แสดงให้เห็นว่ามันเป็นเพียงข้อผิดพลาดใน อย่างไรก็ตามเป็นไปได้มีแนวคิดพื้นฐานบางอย่างNumPY
ที่ฉันเข้าใจผิด ฉันต้องการให้แน่ใจว่าฉันไม่ได้เขียนโค้ดที่มีพฤติกรรมที่ไม่ได้กำหนดซึ่งจะทำงานเฉพาะกับอุบัติเหตุ
pylint
ก่อนnumpy