Синтаксическая ошибка при передаче распакованного аргумента для печати в Python
Вместо простой отладки / журнала распечатайте как это:
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
Это ограничение функции печати или есть какой-то способ заставить ее работать? Если нет, то есть ли эквивалент для печати, который я мог бы использовать?
Я использую Python 2.7, кстати...
4 ответа
print
не является функцией в Python 2.x. В первом фрагменте вы печатаете кортеж, а последний имеет неверный синтаксис. Если вы хотите использовать функцию печати, вам нужно включить ее через from __future__ import print_function
,
Если вы не хотите использовать __future__
Вы можете определить функцию регистрации следующим образом:
def log(condition, *message):
if(<do something here...>):
print ' '.join(str(a) for a in message)
<perhaps do something more...>
Вы должны использовать print message
непосредственно, этого достаточно (он напечатает кортеж дополнительных аргументов).
Небольшое дополнение к предыдущим ответам: в Python 2.x, print
это не функция, а утверждение, но print(arg1, arg2)
действует... как использующий print
заявление о кортеже (arg1, arg2)
,
Это немного отличается от print 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',),)
Результатом является кортеж из кортежа.
Случай 2: расширение аргументов в p
:
>>> def p(*args):
... a(*args) # <== now arguments are expanding
...
>>> p('bb')
('bb',)
Результатом является кортеж аргументов, данных p
,
Так *args
является правильным использованием, но это не допускается в утверждении.
Вы просто используете *args
объявить кортеж аргумента, а не получить к нему доступ. Смотрите пример в документации:
def write_multiple_items(file, separator, *args):
file.write(separator.join(args))
Тот факт, что вы получаете SyntaxError
следует предупредить вас, что это не имеет ничего общего с print
, тем не мение.