首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优雅退出-套接字错误处理

如何优雅退出-套接字错误处理
EN

Stack Overflow用户
提问于 2012-12-04 08:10:52
回答 1查看 559关注 0票数 0

嗨,我正在写一个用户输入url的脚本。我应该验证url,并让用户知道如果url是valid.If我故意键入错误的url我得到了一个错误的消息gaierror,但我已经把错误处理代码在这里,使我的程序得到一条消息“无法连接”喜欢的代码行“如果exit.Seems是无:-print‘无法打开套接字’不是在下面的程序中执行。我是在套接字编程新手。我想我正在做的事情wrong.Could任何人请帮助我提前here.Thanks!

代码语言:javascript
复制
#!/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"

我得到以下错误消息:

代码语言:javascript
复制
 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
EN

回答 1

Stack Overflow用户

发布于 2012-12-04 08:16:29

您可能希望将该socket.getaddrinfo(basename, port, socket.AF_UNSPEC, socket.SOCK_STREAM)包装在try / except socket.gaierror块中,这应该可以做到这一点:

代码语言:javascript
复制
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)导致了这个错误!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13694044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档