পাইপলিঙ্ক কেন numpy.ndarray.shape এর জন্য `আনসস্ক্রিপ্টযোগ্য-অবজেক্ট` ফেরত দেয়?


9

আমি কেবল নিম্নলিখিত "ন্যূনতম" রেপ্রেস কেসটি একসাথে রেখেছি (ন্যূনতমতম উদ্ধৃতিতে কারণ আমি নিশ্চিত করতে চেয়েছিলাম যে 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) খেলে ত্রুটি চলে যায় go

আমার প্রথম প্রবৃত্তিটি বলে যে বিভিন্ন NumPYপদ্ধতির ( arangeবনাম zerosবনাম full, ইত্যাদির) সাথে অসঙ্গতিপূর্ণ আচরণ বোঝায় যে এটি কেবল একটি বাগ রয়েছে NumPY। তবে এটির কিছু অন্তর্নিহিত ধারণা থাকতে পারে NumPYযে আমি ভুল বোঝাবুঝি করছি। আমি নিশ্চিত হতে চাই যে আমি অপরিজ্ঞাত আচরণের সাথে কোডটি লিখছি না যা কেবলমাত্র দুর্ঘটনায় কাজ করে।


1
আমি দোষারোপ চাই pylintসামনেnumpy
hpaulj

উত্তর:


5

মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তবে দেখে মনে হচ্ছে এটি একটি উন্মুক্ত সমস্যা: https://github.com/PyCQA/pylint/issues/3139

যতক্ষণ না সমস্যাটি শেষ হয়ে যায় ততক্ষণ আমি কেবল লাইনটি এতে পরিবর্তন করে যাব

    print(test.shape[0])  # pylint: disable=E1136  # pylint/issues/3139

আমার pylintrcফাইলে


1
সমস্যাটি লিঙ্ক করার জন্য ধন্যবাদ। দুর্ভাগ্যবশত pylint এছাড়াও , লাইন অত্যন্ত দীর্ঘ হচ্ছে অভিযোগ তাই আমি মনে করি আমি দিয়ে বিদ্ধ করতে পারে print(test[:].shape[0])আপনার সমাধান ওভার যেহেতু এটি আমার লাইন খাটো করে তোলে এবং আমাকে রক্ষা করেন থেকে pylintগুলি বিরক্তি নিরবচ্ছিন্ন
stevendesu

2
দ্রষ্টব্য: পাইলট এর সাম্প্রতিক সংস্করণগুলি আইডি দ্বারা অক্ষম করার বিষয়ে সতর্ক করে, তাই আমি পূর্ববর্তী লাইনে এর মতো আরও কিছু করার পরামর্শ দিচ্ছি:# pylint: disable=unsubscriptable-object # pylint/issues/3139
ব্রাইস শোবার

2

নভেম্বর 2019 পর্যন্ত:

ওপর আলোচনায় ব্যবহারকারীদের একজনের উল্লেখ হিসাবে GitHub আপনি downgrading করে সমস্যাটির সমাধান করতে পারে উভয় pylint এবং astroid , যেমন মধ্যেrequirements.txt

astroid>=2.0, <2.3
pylint>=2.3, <2.4

অথবা

pip install astroid==2.2.5 & pip install pylint==2.3.1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.