win32com EnsureDispatch vs Ошибка атрибута Dispatch очищена gen_py - PullRequest
0 голосов
/ 19 июня 2020

У меня, по-видимому, довольно распространенная ошибка win32com, которую многие люди решали с помощью инициализации EnsureDispatch объекта com. Однако я все равно получаю ошибку атрибута. Даже после очистки содержимого папки gen_py.

def xl_com():
'''Returns a com object after testing if library for make-py is functional'''
    for i in range(1,10):
        print('starting com object')
        try:
            xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
            print('initialized through ensure dispatch')
        except:
            print('could not initialize com object lets try a different way')
            xl = win32com.client.dynamic.Dispatch('Excel.Application')
            print('initialized through dynamic dispatch')
        try:
            print('testing if libraries still there for com object')
            xl.Name
            print('success the libraries are there')
            break
        except:
            print('looks like they are not there, deleting gen_py contents')
            import email_functions
            email_functions.clear_gen_py()
            continue
    return xl

From email_functions:

def clear_gen_py():
    """If there is an attribute err0r in win32 
    this function will clear the folder and try again"""
    f_loc = 'C:\\Users\\MYUSERNAME\\AppData\\Local\\Temp\\gen_py'
    for f in Path(f_loc).iterdir():
        Path.unlink(f)
        Path.rmdir(f_loc)
    print('cleared %s hopefully that worked'%f_loc)

File "C: \ Users \ MYUSERNAME \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ win32com \ client \ Dynami c .py ", строка 527, в getattr raise AttributeError ("% s.% s "% (self. username , attr))

AttributeError: Excel.Application.Workbooks

Я использую win32com в anaconda. У меня будет пара дней, когда мне покажется, что я не получаю сообщение об ошибке, а затем это начнется снова. Объект com сохраняется как атрибут глобальной переменной. Он будет хорошо работать в течение пары дней, а затем снова начнет действовать.

Вчера я удалил и переустановил модуль pywin32 безрезультатно. Я знаю, что мне нужно изучить документацию, но работа очень занята. Кто-нибудь знает быстрое исправление?

...