这发生了(Python 2.7.13 - Linux):
import SimpleHTTPServer, SocketServer
httpd = SocketServer.TCPServer(("", 8080), SimpleHTTPServer.SimpleHTTPRequestHandler)
# this fails:
print "%s" % (httpd.socket.getsockname())
# this does not:
print "%s%s" % (httpd.socket.getsockname(), '')
它被认为是一个错误吗?
"..." % ...
字符串插值有两种模式:
第二个选项意味着您永远不能将单个元组插入其中作为单个值;您必须先将该元组包装在另一个元组中。
socket.getsockname()
返回一个元组,所以不能直接插入,你必须先将它包装在一个元组中。
请注意,(...)
您的第一个表达式中的括号仅对表达式进行分组,它们不会使某些内容成为元组;你需要使用逗号来制作一个元组:
>>> (0) # not a tuple
0
>>> 0, # a tuple
(0,)
因为您仅使用一个字符串占位符为字符串插值提供了一个 2 元素元组,所以您会被告知该元组中有更多元素尚未转换:
TypeError: not all arguments converted during string formatting
添加逗号:
print "%s" % (httpd.socket.getsockname(),)
或者更好的是,使用str.format()
格式而不用担心元组:
print "{}".format(httpd.socket.getsockname())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句