2017-08-04 57 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