2013-04-17 13 views
23

如何格式化符合PEP8的長斷言聲明?請忽略我的例子的人爲本質。如何格式化符合PEP8的python斷言語句?

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」選項運行python時,所有'assert'也被刪除。 – Wessie

+4

@Wessie我不明白這是如何相關的。 –

回答

39

重要的是要記住PEP8只是一個指導和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「規則應該被打破」。我傾向於使用舊的風格線延續,如果僅僅因爲它是需要最少的擊鍵來編寫的解決方案。這也是我更喜歡Python到PHP的原因之一:'def'比'function'短。當然,除此之外,還有更多令人信服的理由。 ;-) – Aya

+0

太棒了,謝謝。完全同意將PEP8作爲指導原則。我們使用flake8(它結合了pyflakes和pep8.py),並且我認爲有*東西*可以滿足PEP8以及棉絨的精神。 – stantonk

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

assert condition(a,b), ERR_MESSAGE_01 

是我該怎麼做的......我認爲這很符合......

+1

當這篇文章談論PEP-8合規性時,'CAPS_WITH_UNDERSCORES'這個名字沒有幫助。 –

+0

是的公平點...從C#定義和常量的遺留物。可疑...但我堅持它。除此之外,我想它是一個模塊級別常量,pep8告訴我們這樣命名爲 –

+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!' 

這給你隱含的從PEP 8推薦的圓括號的續行而不破壞斷言行爲。

或者:

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