在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...>