Я просто зібрав наступний "мінімальний" випадок докори (мінімум у котируваннях, тому що я хотів упевнитись, що 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проти zerosvs fullтощо) говорить про те, що це просто помилка NumPY. Однак можливо, є якась основна концепція, NumPYяку я не розумію. Я хотів би бути впевненим, що я не пишу код з невизначеною поведінкою, який працює лише у випадку випадковості.
pylintранішеnumpy