2017-08-04 41 views
-5

我有一個argparser有一個詳細的標誌,我試圖儘量減少我得寫詳細的輸出量。速記'如果'拋出一個語法錯誤

這按預期工作:

#!/usr/bin/python 
verbose=True 
print(verbose) 
if verbose: 
    print("verbose output") 

輸出:

$ ./example.py 
True 
verbose output 

#!/usr/bin/python 
verbose=True 
print(verbose) 
print("verbose output") if verbose 

拋出一個錯誤:

$ ./example.py 
    File "./example.py", line 5 
    print("verbose output") if verbose 
            ^
SyntaxError: invalid syntax 

我以爲python的語法是statement if condition else condition?我犯了一些錯誤嗎?

$ python -V 
Python 3.6.2 
+3

沒有速記'如果test'語法,沒有。只有*條件表達式*' if else '。 –

+0

它具有'表達式,如果條件else表達式'語法。它不具有'語句,如果條件'。 – deceze

+2

你不應該在這裏使用,不需要'縮短'任何東西。如果必須,請將該表達式放在與'if'測試相同的行:'if verbose:print('verbose output')'。 –

回答

-1

定義一個別名,print,要麼打印其說法或什麼都不做,取決於verbose值:你最好使用Logging模塊

if verbose: 
    print_verbose = print 
else: 
    def print_verbose(*args, **kwargs): 
     pass 

print_verbose("This only gets printed if verbose is True") 
+1

這似乎重新創建日誌記錄模塊,但以一種難以遵循的方式 –

+0

它不是重新創建日誌記錄模塊。日誌記錄模塊提供了許多方法來修改輸出的內容,輸出到的位置以及是否完全取得輸出(特別是如果從配置文件加載日誌記錄配置)。我允許配置的唯一事情就是是否調用'print'函數。如果*被*調用,它所做的是仍然完全控制了代碼的寫入。 – chepner

1

詳細輸出是這樣的:

import logging 
logger = logging.getLogger(__name__) 
logger.debug('foo') # prints nothing 
logger.setLevel(logging.DEBUG) 
logger.debug('foo') # prints 'DEBUG:name:foo' 

您可以更新它使用的字符串格式,鏈接在文檔中。

+0

'logging'是一個選項,但不一定是簡單控制'print'函數實際產生輸出的合適選項。請參閱https://docs.python.org/2/howto/logging.html#when-to-use-logging。 – chepner

+0

我讀過,是的 - 我認爲這正是它的目的。 「報告程序正常運行期間發生的事件(例如狀態監視或故障調查) - 這實際上是詳細輸出的結果 –

+0

我這樣想:'print'用於實現程序的功能,日誌記錄是用於描述它是如何執行的。 – chepner