Mike - я полагаю, что контравариантность не позволяется в C# ни один
, См. Универсальное различие параметра типа в CLR еще для некоторой информации
Похоже, вам следует избегать создания исключения из вашей основной функции. Вместо этого вы можете поймать его, обработать как значение, возвращаемое основной программе, а затем поднять его там. Повторное генерирование исключений в Python содержит более подробную информацию.