gpt4 book ai didi

python - 当 url 输入错误时 urlopen 不返回 None 对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:17 24 4
gpt4 key购买 nike

我目前正在阅读 Ryan Mitchell 的《使用 Python 进行网页抓取》。在第一章中,当他谈到处理错误时,他说:

If the server is not found at all (if say, site was down, or the URL was mistyped), urlopen returns a None object.

为了测试这一点,我创建了以下代码片段。

from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup as bs

def getTitle(url):

try:
html = urlopen(url).read()
except HTTPError:
return None

try:
bsObj = bs(html)
except AttributeError:
return None
return bsObj

title = getTitle('http://www.wunderlst.com')
print(title)

在此代码的倒数第二行中,我故意输错了 URL 名称(实际 URL 为 http://www.wunderlist.com)。我希望现在屏幕上会显示 None 。但是,我收到一长串错误。下面我给出错误消息的最后一部分:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "ex4.py", line 18, in <module>
title = getTitle('http://www.wunderlst.com')
File "ex4.py", line 8, in getTitle
html = urlopen(url).read()
File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.4/urllib/request.py", line 463, in open
response = self._open(req, data)
File "/usr/lib/python3.4/urllib/request.py", line 481, in _open
'_open', req)
File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain
result = func(*args)
File "/usr/lib/python3.4/urllib/request.py", line 1210, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/usr/lib/python3.4/urllib/request.py", line 1184, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>

现在,如果我更正 URL 名称,但在网站前面写一些不存在的页面,例如:

title = getTitle('http://www.wunderlist.com/something')

然后我在屏幕上打印出None。我对此真的很困惑。有人可以向我解释一下到底发生了什么吗?提前致谢。

最佳答案

我认为问题是你只捕获了HTTPError(并返回 None)。尝试处理/捕获 URLError 异常。

替换
from urllib.error import HTTPError

from urllib.error import HTTPError, URLError.

替换
HTTPError 除外:

除了(HTTPError、URLError):

这将为您提供所需的行为(在两种情况下都返回 None)。但我建议单独处理这些错误(将第一个 try block 移动到另一个方法,停止抓取错误等)。

关于python - 当 url 输入错误时 urlopen 不返回 None 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com