我試圖找出爲什麼我看到這個。這是代碼片段:帶和不帶「字符串格式」的打印字符串
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