В настоящее время я анализирую список URL-адресов, и в случае, если одно выдает исключение, я хочу просто прервать его и перейти к следующему.
Однако я продолжаю получать
OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]
Решение этого исключения сейчас выходит за рамки моей компетенции, поэтому я хочу просто пропустить его сейчас и разобраться с этим позже.Моя проблема, однако, заключается в том, что когда я пишу команду catch для этого:
try:
r = requests_retry_session(session=s).get(test_link, verify=cafile, allow_redirects=True, timeout=4.0)
except OpenSSL.SSL.Error:
print('SSL error, moving to next domain')
break
, я получаю это:
NameError: name 'OpenSSL' is not defined
Я знаю, что самый простой способ исправить это - простоverify=False
, однако, это очень небезопасно, и я бы предпочел не открывать себя для возможной атаки MITM.
То, что я пробовал:
Попытка следоватьдокументация по этому предыдущему связанному вопросу :
pip install --upgrade certifi
И, наконец, чрезвычайно неаккуратный блок try try, который по существу перехватывает NameError: name 'OpenSSL' is not defined
и разбивает его как ошибку имени, что вовсе не является пифоническим.Я знаю, что могу сделать очень общий перехват всех, однако я не хочу пропускать все ошибки.
Я использую Python 3.7.3 и запрашивает 2.22.0