我有以下代码来回发到远程URL:
request = urllib2.Request('http://www.example.com', postBackData, { 'User-Agent' : 'My User Agent' })
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
checksLogger.error('HTTPError = ' + str(e.code))
except urllib2.URLError, e:
checksLogger.error('URLError = ' + str(e.reason))
except httplib.HTTPException, e:
checksLogger.error('HTTPException')
Run Code Online (Sandbox Code Playgroud)
postBackData是使用urllib.urlencode编码的字典创建的.checksLogger是一个使用日志记录的记录器.
我有一个问题,当远程服务器关闭并且代码退出时,此代码运行(这是在客户服务器上,因此我不知道此时退出堆栈转储/错误是什么).我假设这是因为存在未处理的异常和/或错误.那么有没有其他可能触发的异常,我没有在上面处理?
var*_*tec 59
添加通用异常处理程序
request = urllib2.Request('http://www.example.com', postBackData, { 'User-Agent' : 'My User Agent' })
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
checksLogger.error('HTTPError = ' + str(e.code))
except urllib2.URLError, e:
checksLogger.error('URLError = ' + str(e.reason))
except httplib.HTTPException, e:
checksLogger.error('HTTPException')
except Exception:
import traceback
checksLogger.error('generic exception: ' + traceback.format_exc())
Run Code Online (Sandbox Code Playgroud)
DNS*_*DNS 18
从文档页面 urlopen条目,看起来你只需要捕获URLError.如果你真的想在urllib代码中针对问题对冲你的赌注,你也可以Exception作为后备.难道不只是except:,因为这将赶上SystemExit和KeyboardInterrupt也.
编辑:我的意思是说,你正在捕捉它应该抛出的错误.如果它正在抛出其他东西,那可能是因为urllib代码没有捕获它应该捕获并包裹在其中的东西URLError.即使是stdlib也会错过简单的事情AttributeError.捕捉Exception作为后备(并记录它捕获的内容)将帮助你弄清楚发生了什么,没有陷阱SystemExit和KeyboardInterrupt.
Ste*_*wig 15
$ grep "raise" /usr/lib64/python/urllib2.py
IOError); for HTTP errors, raises an HTTPError, which can also be
raise AttributeError, attr
raise ValueError, "unknown url type: %s" % self.__original
# XXX raise an exception if no one else should try to handle
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
perform the redirect. Otherwise, raise HTTPError if no-one
raise HTTPError(req.get_full_url(), code, msg, headers, fp)
raise HTTPError(req.get_full_url(), code,
raise HTTPError(req.get_full_url(), 401, "digest auth failed",
raise ValueError("AbstractDigestAuthHandler doesn't know "
raise URLError('no host given')
raise URLError('no host given')
raise URLError(err)
raise URLError('unknown url type: %s' % type)
raise URLError('file not on local host')
raise IOError, ('ftp error', 'no host given')
raise URLError(msg)
raise IOError, ('ftp error', msg), sys.exc_info()[2]
raise GopherError('no host given')
Run Code Online (Sandbox Code Playgroud)
urllib2依赖项中也可能存在异常,或者由真正的错误引起异常.
您最好通过自定义sys.excepthook记录文件中所有未捕获的异常.这里的关键经验是永远不会捕获您不打算纠正的异常,并且记录不是纠正.所以不要只是为了记录它们而抓住它们.
| 归档时间: |
|
| 查看次数: |
65771 次 |
| 最近记录: |