Простое пользовательское исключение не возникает так же, как бултины

#python #exception #python-3.8

Вопрос:

У меня есть многопроцессорная программа — 4 процесса, и внутри них я создаю несколько потоков, поэтому она также многопоточна. У меня не так много опыта в их отслеживании и отладке, я сейчас этим занимаюсь. Однако у меня есть этот блок кода на моем tcp-сервере:

У меня есть исключения, подобные этому

 class Error(Exception):  """Basic exception""" class NoDataReceived(Error):  """Raised when there is no data"""  

Теперь код

 try:  ...  if True:  raise ValueError('No data receieved') # lt;--- this will print  # raise NoDataReceived('There is no data') # lt;--- when i use this it won't print  except ValueError as err: # bultin  print('err') except NoDataReceived as err: # custom  print('err') # Does NOT print..?  

Теперь дело в том, что, когда я повышаю ValueError, он распечатывается, когда я поднимаю пользовательский NoDataRecieved, он вообще не печатается.

Я должен сказать, что это многопоточная программа, а также многопроцессорная (потоки в процессе), если я запускаю этот фрагмент кода в однопоточном простом скрипте, он работает так, как должен. Мне не нравится такое поведение. Прежде чем я что-то на этом построю, мне нужно это лучше понять. Я знаю, что мог бы использовать sys_traceback, но я действительно хочу, чтобы это работало так, как должно, просто.

У вас есть объяснение для меня, друзья мои?

[Python 3.8]

Спасибо, что уделили мне время, Кью.

Комментарии:

1. Вы должны были опубликовать всю обратную связь (или, по крайней мере, проверить ее). Это NoDataRec ie ved или NoDataRec ei ved ? Потому что вы определяете одно и улавливаете другое. Также следует отметить, что потоки в Python на самом деле не выполняются параллельно. Google дал бы много результатов по этой теме: Python GIL .

2. Да, я знаю о ГИЛЕ, вот почему я использую многопроцессорную обработку, чтобы фактически запускать ее параллельно, и nodatarieved был просто опечаткой здесь, а не в моем реальном коде, я отредактировал его, но все равно проблема сохраняется