Saya hanya mengumpulkan kasus repro "minimum" berikut (minimum dalam tanda kutip karena saya ingin memastikan pylinttidak 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 pylintkode 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.shapeitu tidak dapat disubkripsikan, meskipun cukup jelas. Ketika saya menjalankan kode itu berfungsi dengan baik:
$> python pylint_error.py
1
Jadi apa yang menyebabkan pylintmenjadi 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 NumPYmetode ( arangevs zerosvs full, dll) menunjukkan itu hanya bug NumPY. Namun mungkin saja ada beberapa konsep yang mendasari NumPYbahwa saya salah paham. Saya ingin memastikan saya tidak menulis kode dengan perilaku tidak terdefinisi yang hanya berfungsi secara tidak sengaja.
pylintsebelumnyanumpy