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
Jawaban:
Saya tidak memiliki reputasi yang cukup untuk berkomentar, tetapi sepertinya ini adalah masalah terbuka: https://github.com/PyCQA/pylint/issues/3139
Sampai masalah terselesaikan pada akhirnya, saya hanya akan mengubah jalurnya
ke
pylintrc
file saya .sumber
pylint
juga mengeluh tentang garis yang terlalu panjang, jadi saya pikir saya mungkin tetap denganprint(test[:].shape[0])
solusi Anda karena membuat garis saya lebih pendek dan menyelamatkan saya daripylint
omelan terus-menerus# pylint: disable=unsubscriptable-object # pylint/issues/3139
Per November 2019:
Seperti yang disebutkan oleh salah satu pengguna dalam diskusi tentang GitHub Anda bisa menyelesaikan masalah dengan menurunkan prioritas kedua pylint dan astroid , misalnya di
requirements.txt
atau
sumber