2016-06-23 2 views
2

Ошибка была вызвана опечаткой. Пожалуйста, отметьте этот вопрос как не по теме.Почему print() печатает пустой кортеж вместо новой строки?

У меня возникла небольшая проблема со следующими строками.

from __future__ import print_function 
print() 

Если я открываю свой Windows CLI и запускаю его, он работает как ожидается.

enter image description here

Когда я вставить его в программу и выполнить ее, вместо того, чтобы просто печать новой строки, он печатает ().

enter image description here

ли кто-нибудь работать в этом раньше?

Дополнительные детали:

Если я запускаю программу с только этими двумя линиями, она работает, как ожидалось.

Но по какой-то причине в моей программе print() отпечатки (). Если я заменю эту строку на print(1), она напечатает 1, как и следовало ожидать.

Работает на Windows 8 64-бит. Python 2.7.11 (v2.7.11: 6d1b6a68f775)

Minimal, полный и проверяемый пример:

class A: 
    def f(self): 
     print() 

if __name__ == '__main__': 
    a = A() 
    a.f() 

Final Update:

Ой !!!! Я идиот.

У меня есть программа драйвера, которая имеет будущий импорт, но класс (который является другим файлом) не работает! У меня есть утверждения вроде print('abc', file=sys.stderr), но они не выполнялись, поэтому программа не запускала никаких проблем.

Мой пример выше фактически работает нормально. В примере, который я запускал, не было импорта. Файл, который я редактировал (в противном случае - точная копия примера).

Woops !!!!

+0

Он просто печатает новую строку на моей консоли. Я не получаю пустой кортеж. Я на машине с Windows, если это имеет значение. – SvbZ3r0

+1

Я не могу воспроизвести это на python 2.7, и я тоже на Windows. Кстати, вам не нужен конструктор этого класса, и это хорошая привычка к подклассу из 'object' (хотя это необязательно для этого конкретного класса) –

+0

В Python 2.7.x' print() 'возвращает кортеж, но в python 3.5.x 'print()' возвращает новую строку. Вы проверили свои версии Python? –

ответ

4

print - специальный оператор в python2.

Когда вы делаете:

from __future__ import print_function 
print() 

Вы фактически вызов print function, который имеет такое же поведение, что и один в Python3.

В вашей программе вы вызываете оператор, а не функцию. Следовательно, print() печатает пустой кортеж (что действительно то, что ()).

Дополнительное примечание:

Если добавить from __future__ import print_function в начале вашего примера, я получаю строку, как ожидалось, а не пустой кортеж.

1

В вашей второй программе python myprog.py вам необходимо указать линию from __future__ import print_function.

Смежные вопросы