Ошибка urllib3.Exceptions.NewConnectionError обрабатывается на одном компьютере, но не обрабатывается на другомPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка urllib3.Exceptions.NewConnectionError обрабатывается на одном компьютере, но не обрабатывается на другом

Сообщение Anonymous »

У меня странная проблема. Чтобы получить краткий минимальный рабочий пример (MWE), предположим, что Connect() возвращает объект urllib3.connection.HTTPConnection. Предположим также, что у меня возникают другие исключения, которые я хочу игнорировать, если в сообщении об ошибке обнаружено «магическое слово» (не само слово, но, эй, это MWE).
MWE:

Код: Выделить всё

try:
conn_obj = Connect()
except Exception as e:  # there are some other exceptions I want to ignore
if 'magicword' not in e.message:
print 'fatal error: {}'.format(e.message)
Это отлично работает на моей машине и при обнаружении выводит «фатальную ошибку» и игнорирует другие исключения (как и должно быть в этом случае).

Однако на компьютере коллеги ошибка не обрабатывается, а вместо этого происходит сбой и создается обратная трассировка. На моем компьютере точно такая же ошибка, только он не печатается и вылетает вместо того, чтобы быть обработанным. Мы оба используем одну и ту же ОС (Windows 7).

Очевидно, что отказ от обработки конкретного исключения не идеален, поэтому я попробовал этот путь:

Код: Выделить всё

from urllib3.exceptions import NewConnectionError

try:
conn_obj = Connect()
except NewConnectionError as nce:
print 'fatal error: {}'.format(e.message)
except Exception as e:  # there are some other exceptions I want to ignore
if 'magicword' not in e.message:
print 'fatal error: {}'.format(e.message)
Это тоже не сработало. По какой-то причине он не поймает исключение на своем ящике. Почему исключение может быть обработано на моем компьютере, а на его — нет?

ОБНОВЛЕНИЕ:

Объект подключения создается внутри сторонней библиотеки pyelasticsearch. Мне всегда удавалось его отловить, но на чужих машинах он не перехватывался с использованием того же кода. Вот файл, который я написал, чтобы проверить, была ли обнаружена ошибка при явном возникновении:

Код: Выделить всё

from urllib3.exceptions import NewConnectionError

def error_test(test_num):
print '\n\n'
try:
if test_num == 1:
print 'TEST 1: See if NewConnectionError is caught specifically'
raise NewConnectionError('no pool', 'test one')
elif test_num == 2:
print 'TEST 2: See if RuntimeError is caught related to magicword'
raise RuntimeError('test two magicword catching test')
elif test_num == 3:
print 'TEST 3: See if RuntimeError is caught NOT related to magicword'
raise RuntimeError('test three')
except NewConnectionError as nce:
print 'Test 1 passed successfully.\n\n{}'.format(nce.message)
except Exception as e:
if 'magicword' not in e.message:
print 'Test 3 passed successfully.\n\n{}'.format(e.message)
else:
print 'Test 2 passed successfully.\n\n{}'.format(e.message)

error_test(1)
error_test(2)
error_test(3)
Этот тест отлично работал на обеих наших машинах. Таким образом, каким-то образом из-за подключения сторонней библиотеки что-то несовместимо между нашими машинами (на самом деле это двоичный файл, скомпилированный pyinstaller, поэтому различия в библиотеках не должны иметь значения).

Подробнее здесь: https://stackoverflow.com/questions/337 ... -not-on-an
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»