问题
This is probably something stupid I am missing but it has really got me hung up on a larger project (c
extension) that I am writing.
Why is print "Hello, World!"
passing None
and an extra \n
to sys.stdout
here?
>>> 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'
>>>
回答1:
print x()
prints the return value of x()
which is implicitly None
Either replace print "Hello world"
with return "Hello world"
or replace print x()
with x()
回答2:
Two things:
First, print automatically adds a new line unless you specify otherwise. If you don't want a new line add a comma:
print "Hello, World!",
Second, you are printing the return of the x() function which is None. The function f()
is equivalent to this:
def x():
print "Hello, World!"
return None
So print x()
prints None
.
回答3:
def x():
print "Hello, World!"
Will execute print
and return None
- additional newlines are generated by print
and None
is printed since you wrote print x()
:)
If you wish to eliminate the additional newline, write x
instead as:
def x():
sys.stdout.write("Hello, World!")
来源:https://stackoverflow.com/questions/8288717/python-print-passing-extra-text-to-sys-stdout