我试图找出为什么我看到这个。这是代码片段:带和不带“字符串格式”的打印字符串
def check_status(addr,port=80):
import urllib2
if not addr.startswith('http://'): addr = "http://" + addr
req = urllib2.Request(addr+":"+str(port))
try:
res = urllib2.urlopen(req,None,10)
sts = str(res.code)
except urllib2.URLError, er:
sts = er.args
print "Print-1\t: %s" % sts
print "Print-2\t:", sts
print "{0}\t: {1}".format('Print-3',sts)
return sts
url = "google.comm"
sts = check_status(url)
print "Print-4\t: %s %s" % (url, sts)
运行脚本,我得到的print语句有趣的结果:
Print-1 : [Errno 8] nodename nor servname provided, or not known
Print-2 : (gaierror(8, 'nodename nor servname provided, or not known'),)
Print-3 : (gaierror(8, 'nodename nor servname provided, or not known'),)
Print-4 : google.comm (gaierror(8, 'nodename nor servname provided, or not known'),)
谁能请解释为什么打印sts
未来不同的打印-2,3和4 ?它正在打印正确的格式只能使用单个格式的字符串%s
。我认为这与urllib2没有任何关系。我在这里错过了什么?谢谢!
出于好奇,你为什么这样做'STS = STR(res.code)'的成功案例,但在'错误的情况下不'STS = STR(er.args)? (如果你这样做了,这个问题永远不会出现,你不会学到新的东西,所以它可能是最好的。只是,我很难理解为什么一个整数不是一个可接受的值传递,但任意异常参数的元组是。) – abarnert
@abarnert:这真是一个有趣的问题。我想我是这样做的,以确保我重新调整一个字符串,而不是一个整数。这实际上是我的一个非常古老的脚本,我正在努力添加一些额外的东西,并被结果击中。顺便说一句,str(er.args)对我来说根本不会改变任何事情。干杯!! – MacUsers