Невозможно обработать исключение - PullRequest
2 голосов
/ 11 октября 2019

Я использую модуль clearbit для получения информации о компании из доменного имени. Я пытался обработать HTTPException, но каким-то образом он не распознается и выдает еще одно исключение NameError.

import clearbit 
def abc(i): 
try: 
  company = clearbit.Company.find(domain=i,stream=True) 
  if company['name'] is None: 
           return "No customer" 
  else: return company['name'] 
except HTTPError as e: 
   s="No customer" 
    return s 
abc('244treqda.com')
---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
<ipython-input-152-43005b4345c0> in abc(i)
      3     try:
----> 4         company = clearbit.Company.find(domain=i,stream=True)
      5         if company['name'] is None:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\clearbit\enrichment\company.py in find(cls, **options)
     15 
---> 16         return cls.get(url, **options)
     17 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\clearbit\resource.py in get(cls, url, **values)
     54         else:
---> 55             response.raise_for_status()
     56 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\models.py in raise_for_status(self)
    939         if http_error_msg:
--> 940             raise HTTPError(http_error_msg, response=self)
    941 

HTTPError: 422 Client Error: Unprocessable Entity for url: https://company-stream.clearbit.com/v2/companies/find?domain=244treqda.com

During handling of the above exception, another exception occurred:

NameError                                 Traceback (most recent call last)
<ipython-input-153-8c883a3f90d2> in <module>
----> 1 abc('244treqda.com')

<ipython-input-152-43005b4345c0> in abc(i)
      7         else:
      8             return company['name']
----> 9     except HTTPError as e:
     10         s="No customer"
     11         return s

NameError: name 'HTTPError' is not defined

In [119]:



try:
   clearbit.Company.find(domain=i,stream=True)
except urllib2.HTTPError as err:
   if err.code == 422:
       return "No customer"

Ожидаемый вывод «Нет клиента», но получаются HTTPError и Attributeerror.

1 Ответ

1 голос
/ 11 октября 2019

Если вы посмотрите немного дальше в трассировке стека, вы увидите

NameError: name 'HTTPError' is not defined

HTTPError не является встроенным исключением Python - вам нужно будет импортировать его изсоответствующий модуль для того, чтобы перехватить этот тип исключения.

В верхней части вашего модуля python добавьте from urllib.error import HTTPError, и оно должно работать.

В качестве альтернативы найдите точное значение HTTPError, выбрасываемое из clearbit, и импортируйте его, если первый вариант не работает.

...