在Python中将解包参数传递到打印时出现语法错误
而不是简单的调试/日志打印,如下所示:在Python中将解包参数传递到打印时出现语法错误,python,python-2.7,argument-unpacking,Python,Python 2.7,Argument Unpacking,而不是简单的调试/日志打印,如下所示: print "error ", error_number 我想使用一个日志函数,在需要时可以进行扩展,如下所示: def log(condition, *message): if(<do something here...>): print(*message) <perhaps do something more...> log(condition, "error ", error_num
print "error ", error_number
我想使用一个日志函数,在需要时可以进行扩展,如下所示:
def log(condition, *message):
if(<do something here...>):
print(*message)
<perhaps do something more...>
log(condition, "error ", error_number)
但我得到以下语法错误:
print *message
^ SyntaxError: invalid syntax
这是打印功能的一个限制,还是有什么方法可以让它工作?如果没有,我是否可以使用与打印相同的版本
顺便说一下,我正在使用Python2.7 您只需使用
*args
来声明参数元组,而不是访问它。见:
得到一个
SyntaxError
的事实应该告诉您,这与print
无关。print
在Python 2.x中不是一个函数。在第一个代码段中,您正在打印一个元组,而最后一个元组的语法无效。如果要使用打印函数,需要通过从uuu future uuu导入打印函数启用它。您应该直接使用打印消息
,这就足够了(它将打印额外参数的元组)
对前面的答案稍加补充:在Python2.x中,
print
不是一个函数而是一个语句,但是print(arg1,arg2)
是有效的。。。使用元组上的打印语句(arg1,arg2)
这与可以看到的打印arg1、arg2有点不同:
>>> print 'aaa', 'bbb'
aaa bbb
>>> print('aaa', 'bbb')
('aaa', 'bbb')
现在,除了themel的答案之外:
案例1:不使用*
展开参数元组
>>> def p(*args):
... a(args) # <== args is a tuple
>>> def a(*args):
... print args # <== args is a tuple (but nothing else can be used)
>>> p('bb')
(('bb',),)
结果是给p
的一组参数
因此,*args
是正确的用法,但这在语句中是不允许的。如果您不想使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,您可以这样定义日志函数:
def log(condition, *message):
if(<do something here...>):
print ' '.join(str(a) for a in message)
<perhaps do something more...>
def日志(条件,*消息):
if():
打印“”。加入(str(a)用于in消息)
@themel不,这是错误的,请看我的答案:如果不展开,将得到一个元组;如果展开,会得到几个参数。这在任何地方都是允许的。无论如何,您的示例是正确的,在本例中,您需要使用元组;请看我的答案。好消息,这里的主要问题是print是一个语句(一个时髦的语句),并且语句不支持解包参数(即使它们是时髦的变量参数接受语句),使用print message
直接将元组打印为“('error',22)”,而不是“error 22”。发帖前试过了,但这不是我想要的。然后,问题:你的代码print(“error”,error\u number)
是否达到了你的预期?我会说不,因为打印('error',3)
打印('error',3)
,而不是直接打印错误3
。这是正确的,您需要新版本的print。糟糕的是,我最初有很多打印“错误”,代码中有3行类似于的行(打印我期望的内容)。当我试图让log方法工作时,我尝试了许多不同的语法,而带括号的语法恰好出现在问题中。Q更新。
>>> def p(*args):
... a(*args) # <== now arguments are expanding
...
>>> p('bb')
('bb',)
def log(condition, *message):
if(<do something here...>):
print ' '.join(str(a) for a in message)
<perhaps do something more...>