Я просто собрал следующий «минимальный» случай воспроизведения (минимум в кавычках, потому что я хотел, чтобы 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 (
test[:].shape) устраняет ошибку
Мой первый инстинкт говорит, что несовместимое поведение с различными NumPYметодами ( arangeпротив zerosи fullт. Д.) Предполагает, что это просто ошибка NumPY. Однако, возможно, есть какая-то основная концепция NumPY, которую я неправильно понимаю. Я хотел бы убедиться, что я не пишу код с неопределенным поведением, который работает только случайно.
pylintраньшеnumpy