2013-02-10 5 views
0

У меня есть эта функция, которая содержит try и except. У меня возникла проблема с получением кода исключения.AttributeError для кода исключения

Я написал код, как это первый:

def _runQuery(self, query, request=None) 
    try: 
     //request codes here 
    except Exception, e: 
     messages.error(
      request, 
      'Error connecting to OFX server. URL: {0} ERROR: {1} {2}'.format(
       self.account.bank.ofx_url, e.code, e.msg)) 
     return '' 

Моего исключение всегда дает мне AttributeError, что е объекты не имеют атрибута «код». Поэтому я подумал, что иногда Exception не имеет рендеринга кода или он имеет значение null. Я снова переписываю свои коды, и это последнее.

except Exception, e: 
     code = "" 
     if e.code: 
      code = e.code 
     messages.error(
      request, 
      'Error connecting to OFX server. URL: {0} ERROR: {1} {2}'.format(
       self.account.bank.ofx_url, code, e.msg)) 

Теперь это дает мне другую ошибку - AttributeError: объект 'SSLError' не имеет атрибута 'код'

Как это исправить? И получить код без этой проблемы?

ответ

1

Попробуйте это:

except Exception, e: 
    code = "" 
    if hasattr(e, 'code'): 
     code = e.code 
    messages.error(
     request, 
     'Error connecting to OFX server. URL: {0} ERROR: {1} {2}'.format(
      self.account.bank.ofx_url, code, e.msg)) 

Вместо того, чтобы пытаться получить доступ к атрибуту кода на вашем исключения, когда вы проверяете, если он существует, то вы можете использовать hasattr() который вернет False вместо того, чтобы выбрасывать другое исключение.

-1

Посмотрите на hasattr and getattr функции:

messages.error(
     request, 
     'Error connecting to OFX server. URL: {0} ERROR: {1} {2}'.format(
      self.account.bank.ofx_url, getattr(e, 'code', ''), e.msg)) 
Смежные вопросы