Ошибка 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»