Python `print` передает дополнительный текст в sys.stdout?

Это, вероятно, что-то глупое, которое мне не хватает, но это действительно заставило меня зациклиться на более крупном проекте ( c extension), который я пишу .

Почему выводит «Hello, World!» , передавая None и дополнительный \ n в sys.stdout здесь?

>>> import sys
>>> class StdOutHook:
...     def write(self, text):
...         sys.__stdout__.write("stdout hook received text: %s\n" % repr(text))
... 
>>> class StdErrHook:
...     def write(self, text):
...         sys.__stderr__.write("stderr hook received text: %s\n" % repr(text))
... 
>>> sys.stdout = StdOutHook()
>>> sys.stderr = StdErrHook()
>>> 
>>> def x():
...     print "Hello, World!"
... 
>>> 
>>> print x()
stdout hook received text: 'Hello, World!'
stdout hook received text: '\n'
stdout hook received text: 'None'
stdout hook received text: '\n'
>>> 
5
задан chown 27 November 2011 в 20:19
поделиться