Arp*_*ire 2 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'))
Run Code Online (Sandbox Code Playgroud)
当我尝试通过此方法处理异常时,显示以下错误:
Traceback (most recent call last):
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
Run Code Online (Sandbox Code Playgroud)
在处理上述异常期间,发生了另一个异常:
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)'),))
Run Code Online (Sandbox Code Playgroud)
还有一个也出现了
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)'),))
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
返回False,然后'https://twitter.com'返回True,这是所需的结果。
顺便说一句,您可以更改
if url.status_code == 200 or url.status_code == 302 or url.status_code == 301:
Run Code Online (Sandbox Code Playgroud)
至
if url.status_code in (200, 302, 301):
Run Code Online (Sandbox Code Playgroud)