嗨,我正在写一个用户输入url的脚本。我应该验证url,并让用户知道如果url是valid.If我故意键入错误的url我得到了一个错误的消息gaierror,但我已经把错误处理代码在这里,使我的程序得到一条消息“无法连接”喜欢的代码行“如果exit.Seems是无:-print‘无法打开套接字’不是在下面的程序中执行。我是在套接字编程新手。我想我正在做的事情wrong.Could任何人请帮助我提前here.Thanks!
#!/usr/bin/env python
import socket
import sys
def hello(c):
t=c
port = 80
slash=t.split("/")
basename="/".join(slash[2:3])
pathname="/"+"/".join(slash[3:])
sock=None
for res in socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
sock= None
continue
try:
sock.connect((basename, port))
except socket.error:
sock= None
continue
if sock is None:
print 'could not open socket'###I dont get this printed
sys.exit(0)
sock.send("HEAD %s HTTP/1.0\r\n\r\n" % pathname)
l=sock.recv(12)
return l
sys.exit(1)
sock.close()
``I call the hello function from here``
k= hello("https://mail.yah")`purposefully wrong to verify error handle
print k
newsplit=k.split()
print newsplit
insplit=eval(newsplit[1])
print insplit
if insplit==404:
print "bad"
else:
print "ok"我得到以下错误消息:
Traceback (most recent call last):
File "C:/myserver/cgi-bin/domain.py", line 40, in <module>
k= hello("https://mail.yah")
"C:/myserver/cgi-bin/domain.py", line 13, in hello
for res in socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
gaierror: [Errno 11004] getaddrinfo failed发布于 2012-12-04 08:16:29
您可能希望将该socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM)包装在try / except socket.gaierror块中,这应该可以做到这一点:
try:
for res in socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
# stuff
except socket.gaierror:
print 'getaddrinfo failed!'实际上,是socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM)导致了这个错误!
https://stackoverflow.com/questions/13694044
复制相似问题