Pycharm के इंस्पेक्टर को “d = {}” की शिकायत क्यों है?


195

जब d = {}Pycharm के कोड इंस्पेक्टर के साथ एक डिक्शनरी को इनिशियलाइज़ करना एक चेतावनी उत्पन्न करता है, तो कहते हैं

इस शब्द रचना को एक शब्दकोश शाब्दिक के रूप में फिर से लिखा जा सकता है।

अगर मैं इसे फिर से लिखूं तो d = dict()चेतावनी दूर हो जाती है। के बाद से {}पहले से ही है एक शब्दकोश शाब्दिक, मैं बहुत हूँ यकीन है कि संदेश गलत है। इसके अलावा, यह दोनों की तरह लगता है d = {}और d = dict()वैध और पायथोनिक हैं।

यह संबंधित प्रश्न यह निष्कर्ष निकालता है कि पसंद सिर्फ शैली / पसंद की बात है: "d = dict ()" और "d = {}" के बीच अंतर

पाइक्रोम की शिकायत क्यों होगी d = {}?

अपडेट करें:

मैक ने उसे नंगा कर दिया। चेतावनी वास्तव में कई लाइनों पर लागू की गई थी, न कि केवल एक जिसे झंडी दी गई थी।

Pycharm लगातार बयानों के एक क्रम की तलाश में लगता है जहां आप एक शब्दकोश को शुरू करते हैं और फिर शब्दकोश में मान सेट करते हैं। उदाहरण के लिए, यह चेतावनी को ट्रिगर करेगा:

d = {}
d['a'] = 1

लेकिन यह कोड नहीं होगा:

d = {}
pass
d['a'] = 1

2
बहुत शोर, और कोई वास्तविक प्रदर्शन लाभ नहीं है, बस एक और अधिक शानदार निरीक्षण
भारी

सूचियों के लिए एक ही बात होती है: एक = [1]; a.append (2), शायद क्योंकि a = [1, 2] अच्छा है ....
cleros

हाँ। कष्टप्रद संदेश। PyCharm द्वारा रेखांकित किए जाने वाले सभी कार्यक्रम को निष्पादित करने से पहले एक असहज बनाता है।
राजकुमार आर।

मुझे JetBrains YouTrack - youtrack.jetbrains.com/issue/PY-19269#u=1461253420326 में इसी तरह का मुद्दा मिला और यह कहता है: इस मामले में PyCharm सुझाव देता है कि आप something इसे असाइन करने के बजाय प्रमुख शाब्दिक अधिकार में विशेषता के लिए मूल्य प्रदान कर सकते हैं। अगली पंक्ति में।
डुडनिकॉफ

जवाबों:


244

आपके शब्दकोश घोषणा के लिए निम्नलिखित कोड क्या है?

मुझे लगता है कि यदि आपके पास कुछ है तो pycharm त्रुटि को ट्रिगर करेगा:

dic = {}
dic['aaa'] = 5

जैसा कि आप लिख सकते थे

dic = {'aaa': 5}

BTW: तथ्य यह है कि अगर आप फ़ंक्शन का उपयोग करते हैं तो त्रुटि दूर हो जाती है जरूरी नहीं कि pycharm का मानना dict()है कि यह एक शाब्दिक है। इसका मतलब सिर्फ इतना हो सकता है कि इसके लिए कोई शिकायत नहीं है:

dic = dict()
dic['aaa'] = 5

HTH!


6
जाहिरा तौर पर यह इन सभी गैर-उपयोगी शोर निरीक्षणों के लिए है दुर्भाग्य से मेरे कुछ सहयोगियों ने इसे पूरी तरह से बंद कर दिया है, यह शर्म की बात है क्योंकि यह पीईपी, ..., वास्तविक समस्याओं और वास्तविक प्रदर्शन के संकेत जैसी कई चीजों के लिए उपयोगी है।
१४:१५

मेरे मामले में उस प्रकार का पुनर्लेखन संभव नहीं है, क्योंकि प्रत्येक शब्दकोश आइटम जो बनाया गया है (लेकिन पहला वाला) पिछले शब्दकोश आइटम पर निर्भर करता है। इसलिए उन्हें एक ही समय में हर आइटम के बजाय एक-एक करके शब्दकोश को सौंपा जाना चाहिए। हालाँकि, PyCharm अभी भी शिकायत करते हैं और कहते हैं कि मुझे शब्दकोश को शाब्दिक के रूप में बनाना चाहिए। मुझे लगता है कि मुझे dic = dict()वर्कअराउंड का उपयोग करना है ...
हैलोगूडीबाई

@HelloGoodbye - समस्या को हल करने मैं एक योग्य राय व्यक्त नहीं कर सकते कोशिश कर रहे हैं जानते हुए भी, लेकिन आप के साथ शुरू करने पर विचार किया है बिना d = { 'aaa': f1(something) }तो d = f2(d)फिर d = f3(d)आदि ... या वैकल्पिक रूप से d['bbb'] = f2(d), d['ccc'] = f3(d)...?
मैक

निर्माण मेरे पास है d = {}, d['a'] = A, d['b'] = f(d['a']), d['c'] = f(d['b'])आदि,
HelloGoodbye

5
@HelloGoodbye - तो, ​​क्यों नहीं पहले दो के साथ विलय करने के लिए d = {'a': A}और फिर अनुक्रम के रूप में आप उल्लिखित रखना?
मैक

15

इसे प्रोजेक्ट सेटिंग्स या डिफ़ॉल्ट सेटिंग्स में अक्षम किया जा सकता है।

  • सेटिंग पर जाएं -> निरीक्षण -> पायथन
  • अनचेक "शब्दकोश सृजन शाब्दिक शब्दकोश शाब्दिक द्वारा फिर से लिखा जा सकता है"

यह वही है जो मैंने किया है और पुष्टि कर सकता है कि यह अच्छी तरह से काम करता है। मेरा कोड था: दो शब्दों को मर्ज करने के लिए पेलोड = {** BASEPAYLOAD, ** ExtraPayload} और यह त्रुटि फेंक रहा था।
पा

9

उन लोगों के लिए जो एकल ऑपरेशन के साथ शब्दकोशों को शुरू करने के लिए (बस मुझे पसंद करते हैं) पसंद करते हैं

d = {
  'a': 12,
  'b': 'foo',
  'c': 'bar'
}

इसके बजाय कई लाइनों की तरह

d = dict()
d['a'] = 12
d['b'] = ....

अंत में मैं इसके साथ समाप्त हुआ:

d = dict()
d.update({
  'a': 12,
  'b': 'foo',
  'c': 'bar'
})

Pycharm इस पर शिकायत नहीं कर रहा है


7
मुझे शर्मिंदगी महसूस हुई। :( तो, आपने वास्तव में कोड की मात्रा में वृद्धि की है और इसे कम स्पष्ट किया है और धीमी गति से चल रहा है बस संपादक में एक चेतावनी से छुटकारा पाने के लिए जिसका आप उपयोग करते हैं ... मैं pycharm का उपयोग नहीं करता हूं, लेकिन मुझे लगता है कि कुछ है कॉन्फ़िगरेशन टॉगल की तरह है जो चेतावनी को अक्षम कर देगा और आपको एक पाइथोनिक तरीके से कोडिंग करने की अनुमति देगा। :)
mac

2
@ मैं अब सहमत हूँ। मैं युवा और बेवकूफ था) तब से मैं (थोड़ा) बदल गया हूं और बस उन चेतावनियों को अक्षम कर दिया है
इगोर.के

जबरदस्त हंसी! यह मेरे द्वारा प्राप्त की गई सबसे यादगार समय-ऑफसेट टिप्पणी होनी चाहिए! ;)
मैक

0
mydict = {
  a: 5,
  b:z+c/2
}

सीधे उन्हें पहले से परिभाषित किए बिना और फिर नए मूल्यों को पुन: प्रस्तुत करने के बिना शब्दकोश बनाया जा सकता था।


0

मेरे पास एक ऐसी स्थिति है जहां यह चेतावनी मुझे नरक से बाहर निकाल रही है। मेरे मामले में, मैं अपने अधिनायक को आंशिक रूप से शाब्दिक रूप से और आंशिक रूप से एक कार्य द्वारा टपल आउटपुट से पॉप्युलेट कर रहा हूं, जैसे:

def get_other_values():
    return 3, 4

foo = {
    "a": 1,
    "b": 2
}
foo["c"], foo["d"] = get_other_values()

इसलिए, जब तक मैं get_other_values ​​के आउटपुट के लिए अंतरिम संस्करण नहीं बनाता, PEP8 इस चेतावनी को उत्पन्न करता है, भले ही मैं शाब्दिक के साथ तानाशाही पैदा कर रहा हूं। और मैं शाब्दिक रूप से c और d कीज़ को असाइन नहीं कर सकता, क्योंकि मान एक ट्यूपल के रूप में आउटपुट हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.