Ошибка типа и ошибка атрибута

#python

#питон

Вопрос:

Я искал много способов в Интернете, но я все еще не могу ее решить. Я новичок в python. Пожалуйста, помогите мне взглянуть.

 import hashlib
import time
import traceback
import win32api
import win32clipboard as clip
from io import BytesIO
import win32con
from PIL import Image


def setImage(data):
    m = hashlib.md5()
    try:
        clip.OpenClipboard()  
        clip.EmptyClipboard()  
        clip.SetClipboardData(win32con.CF_DIB, data) 
        m.update(clip.GetClipboardData(win32con.CF_DIB))
        clip.CloseClipboard()
        return m.hexdigest()
    except:
        traceback.print_exc()
        setImage(data)

def copyPicMain(imagePath, width = 600, height = 480, internal=0,    
 notResize = False):
    m = hashlib.md5()
    try:
        clip.OpenClipboard()
        m.update(clip.GetClipboardData(win32con.CF_DIB))
        clip.CloseClipboard()
        pre_md5 = m.hexdigest()
    except TypeError:
        # if clip is empty
        traceback.print_exc()
        print('empty')
        pre_md5 = ''
    except:
        traceback.print_exc()
        clip.OpenClipboard()
        m.update(clip.GetClipboardData(win32con.CF_DIB))
        clip.CloseClipboard()
        pre_md5 = m.hexdigest()
    img = Image.open(imagePath)
    output = BytesIO()
    if not notResize:
        img = img.resize((height, width), Image.BILINEAR)
    img.convert("RGB").save(output, "BMP")
    data = output.getvalue()[14:]
    output.close()
    new_md5 = setImage(data)
    print(pre_md5, new_md5)
    time.sleep(internal)
    win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0)  # ctrl key code 17
    win32api.keybd_event(86, 0, 0, 0)  # v key code 86
    win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)  # key up 
    time.sleep(internal)

if __name__ == '__main__':
    imagePathList =    [r'C:UsersstrivesDesktoppanda.png',r'C:UsersstrivesDesktopblack.png',r'C:UsersstrivesDesktop1.png']
for imagePath in imagePathList:
    copyPicMain(imagePath)
 

Результат отладки:

C:Usersstrives >python C:UsersstrivesDesktoptest.py Обратная трассировка (последний последний вызов):

Файл «C:UsersstrivesDesktoptest.py «, строка 28, в copyPicMain m.обновление(клип.GetClipboardData(win32con.CF_DIB))

Ошибка типа: указанный формат буфера обмена недоступен

пусто

Обратная трассировка (последний последний вызов):

Файл «C:UsersstrivesAppDataLocalProgramsPythonPython37-32libsite-

packagesPILImage.py «, строка 2656, в открытом fp.seek(0)

Ошибка атрибута: объект ‘list’ не имеет атрибута ‘seek’

Во время обработки вышеупомянутого исключения возникло другое исключение:

Обратная трассировка (последний последний вызов):

Файл «C:UsersstrivesDesktoptest.py «, строка 60, в copyPicMain(imagePathList)

Файл «C:UsersstrivesDesktoptest.py «, строка 42, в copyPicMain img = Image.open(путь к изображению)

Файл «C:UsersstrivesAppDataLocalProgramsPythonPython37-32libsite-packagesPILImage.py «, строка 2658, в открытом fp = io.BytesIO(fp.read())

Ошибка атрибута: объект ‘list’ не имеет атрибута ‘read’

Редактировать

Я перекомпилировал его, и возникла следующая ошибка.

C:Usersstrives >python C:UsersstrivesDesktoptest.py

cfdb447aa6b20d45ba79b5802a677454 1aa0384b01ed1e2ecd6158c52a1355a5 1aa0384b01ed1e2ecd6158c52a1355a5 c28f8947d15edb17752ec5f503a1b82b

Обратная трассировка (последний последний вызов):

Файл «C:UsersstrivesDesktoptest.py «, строка 27, в клипе copyPicMain.OpenClipboard()

pywintypes.ошибка: (5, ‘OpenClipboard’, ‘Доступ запрещен.’) c28f8947d15edb17752ec5f503a1b82b cfdb447aa6b20d45ba79b5802a677454

Ответ №1:

вы допустили ошибку в

                      for imagePath in imagePathList:
                          copyPicMain(imagePathList)
 

вы должны отправить ImagePath в качестве параметра, а не полного списка, например:

                      for imagePath in imagePathList:
                          copyPicMain(imagePath)
 

Надеюсь, это поможет 🙂

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

1. Появилась новая ошибка. Я отредактировал его снова. Пожалуйста, посмотрите.

2. ошибка, на которую я указал, была законной, почему вы дали мне отрицательный голос?

3. вы допустили ошибку при if __name__ == '__main__': imagePathList = [r'C:UsersstrivesDesktoppanda.png',r'C:UsersstrivesDesktopblack.png',r'C:UsersstrivesDesktop1.png'] for imagePath in imagePathList: copyPicMain(imagePath) добавлении отступа, поэтому цикл становится под if __name__ == '__main__':

4. Код не будет сообщать об ошибках, но функция не реализована, но это неплохо.