2013-04-17 5 views
23

एक लंबे समय तक जोर देने वाला बयान कैसे प्रारूपित करता है जो पीईपी 8 का अनुपालन करता है? कृपया मेरे उदाहरण की प्रकृति प्रकृति को अनदेखा करें।पीईपी 8 का अनुपालन करते हुए एक पायथन assert कथन कैसे प्रारूपित करें?

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), 'some_param_name must be an instance of SomeClassName, silly goose!' 

एक कोष्टक में लपेट नहीं कर सकता, क्योंकि वह ज़ोर बयान के व्यवहार में परिवर्तन के बाद से यह एक कीवर्ड, नहीं अंतर्निहित कार्य है।

+0

'assert' वास्तव में केवल के लिए ** डिबगिंग ** उद्देश्य, किसी भी अन्य उपयोग' assert' कार्यक्षमता का दुरुपयोग है किया जाना चाहिए। '-O' विकल्प के साथ पायथन चलाते समय सभी 'assert' को भी हटा दिया जाता है। – Wessie

+4

@ वेस्सी मैं नहीं देखता कि यह कैसे प्रासंगिक है। –

उत्तर

39

यह याद रखना महत्वपूर्ण है कि पीईपी 8 केवल एक दिशानिर्देश है और even states that there are times when the rules should be broken है।

लेकिन सबसे महत्वपूर्ण बात यह है कि जब असंगत होना है - कभी-कभी स्टाइल गाइड लागू नहीं होता है।

इसे ध्यान में रखते

, मैं शायद पुरानी शैली लाइन निरंतरता के साथ इस बारे में होगा:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), \ 
      'some_param_name must be an instance of SomeClassName, silly goose!' 

है कि आप (या अपने लिंटर) के साथ अच्छी तरह से नहीं बैठता, तो आप हमेशा कर सकते हैं:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), ( 
      'some_param_name must be an instance of SomeClassName, silly goose!') 

या यहाँ तक कि:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), ( 
      'some_param_name must be an instance of SomeClassName, ' 
      'silly goose!') 
+1

+1। मैं तर्क दूंगा कि यह यहां अधिक पठनीय समाधान है। बैकस्लैश निरंतरता बैकस्लैश लाइन निरंतरता पर * पसंदीदा * है, लेकिन यह एक सामान्य बयान है, और व्यक्तिगत मामले अलग-अलग हैं। "नियमों को तोड़ा जाना चाहिए" के लिए –

+0

+1। मैं पुरानी स्टाइल लाइन निरंतरता का उपयोग करता हूं, अगर केवल इसलिए कि यह समाधान है जिसके लिए सबसे कम कीस्ट्रोक लिखना आवश्यक है। PHP के लिए पायथन पसंद करने के कारणों में से एक यह भी है: 'def'' function' से छोटा है। निश्चित रूप से, उससे कहीं अधिक आकर्षक कारण हैं। ;-) – Aya

+0

बहुत बढ़िया, धन्यवाद। पीईपी 8 पर दिशानिर्देश होने पर पूरी तरह से सहमत हैं। हम flake8 (जो pyflakes और pep8.py को जोड़ती है) का उपयोग करते हैं, और मुझे लगा कि * कुछ * था जो पीईपी 8 के साथ-साथ लिंटर्स की भावना को पूरा करेगा। – stantonk

4
ERR_MESSAGE_01 = ''' 
Some really long error message 
''' 

assert condition(a,b), ERR_MESSAGE_01 

कैसे मैं यह कर है ... और मुझे यह ठीक अनुपालन करता है लगता है ..

+1

जब पोस्ट पीईपी -8 अनुपालन के बारे में बात कर रही है, तो 'CAPS_WITH_UNDERSCORES' नाम मदद नहीं कर रहे हैं। –

+0

हाँ उचित बिंदु ... सी # डिफाइन और स्थिरांक से कैरियोवर। संदिग्ध ... लेकिन मैं चिपके हुए हूँ।इसके अलावा मैं इसे मॉड्यूल लेवल स्थिरता के रूप में सोच रहा हूं, जिसमें पेप 8 हमें –

+3

कॉन्स्टेंट्स के नाम पर बताता है: कॉन्स्टेंट आमतौर पर मॉड्यूल स्तर पर परिभाषित होते हैं और शब्दों को अलग करने वाले अंडरस्कोर के साथ सभी पूंजी अक्षरों में लिखे जाते हैं। उदाहरणों में MAX_OVERFLOW और TOTAL शामिल हैं। –

3

यह ध्यान देने योग्य है कि यह, कोष्ठक के साथ रैप करने के लिए अभी जिस तरह तुम सोच रहे हैं में नहीं संभव है लायक है।

assert isinstance(some_param_name, 
        SomeClassName), ('some_param_name must be an instance of ' 
            'SomeClassName, silly goose!') 

मैं यह विशेष रूप से पठनीय है तथापि, बहस नहीं होगी। कुछ मामलों में, यह सही विकल्प हो सकता है।

1
def afunc(some_param_name): 
    assert (isinstance(some_param_name, SomeClassName) 
      ), 'some_param_name must be an instance of SomeClassName, silly goose!' 

यह आपको कोष्ठकों से गर्भित लाइन निरंतरता है कि ज़ोर व्यवहार को तोड़ने के बिना पीईपी 8 से सिफारिश की है देता है।

वैकल्पिक रूप से

:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), (
      'some_param_name must be an instance of SomeClassName, silly goose!') 
संबंधित मुद्दे