Вы можете поймать исключение и затем поднять свое собственное:
def world():
try:
wb = xw.Book.caller()
except Exception:
raise CustomException(custom_message)
wb.sheets[0].range('A1').value = 'Hello World!'
Вы обеспокоены тем, что Exception
является слишком общим, и это правильно. Но это вина Xlwings, а не твоя. Если он поднимает общий Exception
, это все, что вам осталось поймать. Вы можете проверить сообщение об исключении, чтобы убедиться, что вы не перехватываете неправильное исключение, но это будет хрупким Сообщения об ошибках обычно не документированы и не должны рассматриваться как общедоступный стабильный API.
В качестве альтернативы вы можете решить проблему там, где проблема, исходный код xlwings , и заставить его делать то, что мне кажется правильным: выдвинуть более конкретное исключение.
class NotFromExcelError(Exception):
pass
И в конце caller
:
raise NotFromExcelError('Book.caller() must not be called directly. Call through Excel '
'or set a mock caller first with Book.set_mock_caller().')
Я надеюсь, что такой запрос на извлечение будет принят, потому что повышение голого Exception
, как это происходит в настоящее время, выглядит действительно неправильно.