Исключения никогда не бывают "без видимой причины". Всегда есть причина, и эта причина должна быть исправлена. В противном случае ваша программа начнет выдавать «случайные» данные, где «случайный» зависит от ошибки, которую вы скрываете.
Но, конечно, вам нужно решение вашей проблемы. Вот мое предложение:
Создайте класс-оболочку, который реализует все необходимые вам методы и делегирует их реальному экземпляру Excel.
Добавьте декоратор перед каждым методом, который оборачивает метод в блок try except
, и регистрируйте исключение. Никогда не глотайте исключения
Теперь код работает для вашего клиента, который покупает вас некоторое время, чтобы выяснить причину проблемы. Я предполагаю, что а) Excel не выдает полезное сообщение об ошибке, или б) код оболочки проглатывает настоящее исключение, оставляя вас в неведении, или в) метод Excel возвращает код ошибки (например, «ложь» для «не удалось») и вам нужно вызвать другой метод Excel, чтобы определить причину проблемы.
[РЕДАКТИРОВАТЬ] На основе приведенного ниже комментария, который сводится к «Моему боссу все равно, и я ничего не могу поделать»: вы упускаете важный момент: это ваши боссы обязанность принять решение, но ваша обязанность предоставить ей список вариантов вместе с плюсами / минусами, чтобы она могла принять правильное решение. Просто сидеть там и говорить: «Я ничего не могу сделать» - и вы попадете в беду, которую вы пытаетесь избежать.
Пример: * * тысяча двадцать-восемь
Решение 1: игнорировать ошибки
Pro: Наименьший объем работы
Против: Есть вероятность, что полученные данные неверны или случайны. Если важные бизнес-решения основаны на нем, существует высокий риск того, что эти решения будут неверными.
Решение 2. Зарегистрируйте ошибки
Pro: Небольшой объем работы, пользователи могут начать быстро использовать результаты, тратит время на выяснение источника проблемы
Con: «Если вы не можете исправить это сегодня, с чего вы взяли, что у вас будет время исправить это завтра?» Кроме того, вам может потребоваться много времени, чтобы найти источник проблемы, потому что вы не являетесь экспертом
Решение 3: Задайте вопрос эксперту
Найдите эксперта в этой области и помогите ему / ей найти / улучшить решение.
Pro: найдет решение намного быстрее, чем самостоятельно изучит все тонкости COM
Против: Дорогой, но высокий шанс на успех. Также найдет проблемы, о которых мы даже не знаем.
...
Я думаю, вы видите шаблон. Боссы принимают неправильные решения, потому что мы (охотно) позволяем им. Любой босс в мире рад за неопровержимые факты и информацию, когда им приходится принимать решение (ну, те, кто не должен быть начальством, так что это верный способ узнать, когда начинать искать новую работу) .
Если вы выбираете решение № 2, переходите к подходу обертки. См. Документацию , как написать декоратор ( пример из IBM ). Это всего несколько минут работы, чтобы обернуть все методы, и это даст вам кое-что для работы.
Следующим шагом является создание меньшего примера, который иногда дает сбой, а затем публикация конкретных вопросов о Python, Excel и обертке COM здесь, чтобы выяснить причину проблем.
[EDIT2] Вот некоторый код, который оборачивает «опасные» части во вспомогательный класс и делает обновление стилей более простым:
class BorderHelper(object):
def __init__(self, excel):
self.excel = excel
def set( type, LineStyle = None, Weight = None, Color = None ):
border = self.excel.Selection.Borders( type )
try:
if LineStyle is not None:
border.LineStyle = LineStyle
except:
pass # Ignore if a style can't be set
try:
if Weight is not None:
border.Weight = Weight
except:
pass # Ignore if a style can't be set
try:
if Color is not None:
border.Color = Color
except:
pass # Ignore if a style can't be set
Использование:
borders = BorderHelper( excel )
borders.set( xlDiagonalDown, LineStyle = xlNone )
borders.set( xlDiagonalUp, LineStyle = xlNone )
borders.set( xlEdgeLeft, LineStyle = xlContinuous, Weight = xlThin, Color = xlAutomatic )
...