2017-02-21 50 views
0

я пытаюсь загрузить вложения Outlook 2013 на Windows 7. Я написал следующие функции для него:«UnboundLocalError» в той же функции, чтобы загрузить вложение из Outlook 2013 при запуске с различными параметрами

def attach(subject,name): 
    print "Execution begin" 
    outlook = Dispatch("Outlook.Application").GetNamespace("MAPI") 
    inbox = outlook.GetDefaultFolder("6") 
    all_inbox = inbox.Items 
    val_date = date.date.today() 

    print "accessing parameters" 
    sub_today = subject 
    att_today = name 

    for msg in all_inbox: 
     if msg.Subject == sub_today: 
     print "sub_today" 
     break 
    for attachment in msg.Attachments: 
     if attachment.FileName == att_today: 
     print "att_today" 
     print attachment 
     break 

    repository='C:\\Users\\tanmay.shrivastava\\Desktop\\Dashboard' 
    print "repository" 
    attachment.SaveAsFile(repository + '\\'+att_today) 
    print "saved" 
    print "Execution completed" 

я назвал функция с двумя разными списками: список 1 и список 2.

list1=['Hi','cr.txt'] 
list2=['abc Requirements','cr.txt'] 

Код работает, когда я вызываю его со списком1.

attach(list1[0],list1[1]) 

но когда я называю его с параметрами из list2, он показывает ошибку

attach(list2[0],list2[1]) 

UnboundLocalError       Traceback (most recent call last) 
<ipython-input-12-4238cd3c2efd> in <module>() 
----> 1 attach(list2[0],list2[1]) 

<ipython-input-2-3bb862eb2bb6> in attach(subject, name) 
    26  repository='C:\\Users\\tanmay.shrivastava\\Desktop\\Dashboard' 
    27  print "repository" 
---> 28  attachment.SaveAsFile(repository + '\\'+att_today) 
    29  print "saved" 
    30  print "Execution completed" 

UnboundLocalError: local variable 'attachment' referenced before assignment 

Я не знаю, что является причиной его. Может кто-нибудь мне помочь?

+0

Моя догадка 'msg.Attachments' был пуст поэтому' attachment' никогда не определено. –

+0

@AlexFung Я проверил его, отправив электронное письмо мне с необходимым приложением. Если почта нет, то я предполагаю, что она вызывает «AttributeError» –

+0

. Так что мое решение не позволяет избежать ошибок? –

ответ

0

Причина, по которой у вас возникла ошибка, заключается в том, что нет msg или attachment.

Это не вызовет ошибку, как упомянуто в вопросе:

def attach(subject,name): 
    print "Execution begin" 
    outlook = Dispatch("Outlook.Application").GetNamespace("MAPI") 
    inbox = outlook.GetDefaultFolder("6") 
    all_inbox = inbox.Items 
    val_date = date.date.today() 

    print "accessing parameters" 

    for msg in all_inbox: 
     if msg.Subject == subject: 
      print "sub_today" 

      for attachment in msg.Attachments: 
       if attachment.FileName == name: 
        print "att_today" 
        print attachment 

        repository='C:\\Users\\tanmay.shrivastava\\Desktop\\Dashboard' 
        print "repository" 
        attachment.SaveAsFile(repository + '\\'+name) 
        print "saved" 
        print "Execution completed" 
        return True 
+0

Я отправил по электронной почте требуемый файл с требуемым почтовым предметом, но он вызвал ошибку. Я проверю, работает это или нет. –

+0

Дайте мне знать, как это происходит. –

+0

он по-прежнему показывает привязку 'UnboundLocalError: локальная переменная ', на которую ссылаются перед присваиванием. –