python - 通过 SSLError 处理异常请求

标签 python error-handling

这是我检查链接的功能。但是当链接是假的时它会抛出一个错误。例如,它适用于 twitter.com 但不适用于 twitt.com。

class Quality_Check:
    def check_broken_link(self,data):
        url= requests.head(data)

        try:
            if url.status_code==200 or url.status_code==302 or url.status_code==301:
                return True
        except requests.exceptions.SSLError as e:
            return False

qc=Quality_Check()
print(qc.check_broken_link('https://twitte.com'))

当我尝试通过这种方法处理异常时,它显示以下错误:

Traceback (most recent call last):
      ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)

在处理上述异常的过程中,又发生了一个异常:

raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='twitte.com', 
port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, 
'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)'),))

还有一个也出现了

requests.exceptions.SSLError: HTTPSConnectionPool(host='twitte.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)'),))

最佳答案

异常发生在 url= requests.head(data) 行。所以你应该像这样在 try 中包含该行:

class Quality_Check:
    def check_broken_link(self,data):
        try:
            url = requests.head(data)
            if url.status_code == 200 or url.status_code == 302 or url.status_code == 301:
                return True
        except requests.exceptions.SSLError as e:
            return False

qc=Quality_Check()
qc.check_broken_link('https://twitte.com')

返回 False,并在 'https://twitter.com' 上返回 True,这是所需的结果。


顺便说一句,你可以改变你的线路

if url.status_code == 200 or url.status_code == 302 or url.status_code == 301:

if url.status_code in (200, 302, 301):

关于python - 通过 SSLError 处理异常请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47975539/

相关文章:

javascript - Google Chrome JavaScript控制台上的语法错误

python - 在 Google Colab 中将 ipynb notebook 转换为 HTML

java - Spring Integration 错误 channel 未收到所有异常

javascript - "throw new Error()"在 catch block 上下文中捕获

javascript - 如何验证单元格中的更改并确定是否应进行该更改?

javascript - 与抛出错误相反,ES6函数的默认参数如何返回未定义的?

python - 将 Django 框架与网站和独立应用程序一起使用

python - python中带小数的直方图

python - 如何加快 Bokeh 中选择/多选小部件的更新?

python - 在 Python 中获取哈希的最低 10 位作为 int 的最有效方法