Saya hanya mengumpulkan kasus repro "minimum" berikut (minimum dalam tanda kutip karena saya ingin memastikan pylint
tidak ada kesalahan, peringatan, petunjuk, atau saran lain - artinya ada sedikit pelat baja):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Ketika saya menjalankan pylint
kode ini ( pylint pylint_error.py
) saya mendapatkan output berikut:
$> 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)
Ia mengklaim bahwa test.shape
itu tidak dapat disubkripsikan, meskipun cukup jelas. Ketika saya menjalankan kode itu berfungsi dengan baik:
$> python pylint_error.py
1
Jadi apa yang menyebabkan pylint
menjadi bingung, dan bagaimana saya bisa memperbaikinya?
Beberapa catatan tambahan:
- Jika saya menyatakan tes sebagai
np.arange(1)
kesalahan hilang - Jika saya menyatakan tes sebagai
np.zeros(1)
,np.zeros((1))
,np.ones(1)
, ataunp.ones((1))
kesalahan tidak tidak pergi - Jika saya menyatakan tes sebagai
np.full((1), 1)
kesalahan hilang - Menentukan tipe (
test: np.ndarray = np.array([1])
) tidak memperbaiki kesalahan - Menentukan a
dtype
(np.array([1], dtype=np.uint8)
) tidak memperbaiki kesalahan - Mengambil sepotong tes (
test[:].shape
) membuat kesalahan hilang
Insting pertama saya mengatakan bahwa perilaku tidak konsisten dengan berbagai NumPY
metode ( arange
vs zeros
vs full
, dll) menunjukkan itu hanya bug NumPY
. Namun mungkin saja ada beberapa konsep yang mendasari NumPY
bahwa saya salah paham. Saya ingin memastikan saya tidak menulis kode dengan perilaku tidak terdefinisi yang hanya berfungsi secara tidak sengaja.
pylint
sebelumnyanumpy