2013-06-23 5 views
0

Tkinter를 통해 문자 메시지를 보내려고합니다. 그래서 sms:hello을 입력하십시오. 그러면 hello이라는 문자 메시지가 전송됩니다. 이렇게하려면 AT & T 전자 메일 서버와 GMail을 사용하여 단어를 전자 메일로 보냅니다. 그래서이 프로그램은 모든 전자 메일 인증 g_userg_passm_num을 포함하는 INFO.txt을 읽습니다. 그런 다음 텍스트 메시지를 보내는 전자 메일을 보낼 사람을 사용합니다.전역 및 로컬 파이썬

이제 내 문제는 UnboundLocalError: local variable 'g_user' referenced before assignment입니다. 내가 아는 것은 global 변수가 아닌 것으로 인해 발생합니다. 누구든지 나를 도울 수 있습니까? 나는

root = Tk() 
#open file 
file=open('INFO.txt') 
line=file.readline() 
if 'Mobile_number:::' in line: 
    m_num=line[16:] 
if 'GMail_name:::' in line: 
    g_user=line[13:] 
if 'GMail_pass:::' in line: 
    g_pass=line[13:] 



def callback(event): 
    text = inputfield.get() 
    if 'sms:' in text: 
     textmessage() 



def textmessage():#sms: 
    import smtplib 
     #open file 
    file=open('INFO.txt') 
    line=file.readline() 
    if 'Mobile_number:::' in line: 
     m_num=line[16:] 
    if 'GMail_name:::' in line: 
     g_user=line[13:] 
    if 'GMail_pass:::' in line: 
     g_pass=line[13:] 

     SMTP_SERVER = 'smtp.gmail.com' 
    SMTP_PORT = 587 

    sender = '{}@gmail.com'.format(g_user) 
    password='{}'.format(g_pass) 
    recipient = '{}@txt.att.net'.format(m_num) 
    subject = 'Gmail SMTP Test' 
    body = text[4:] 

    "Sends an e-mail to the specified recipient." 

    body = "" + body + "" 

    headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 
    headers = "\r\n".join(headers) 

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) 

    session.ehlo() 
    session.starttls() 
    session.ehlo 
    session.login(sender, password) 

    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body) 
    session.quit() 

    text2=text[4:] 
    confirmation="SMS containing '{}' sent".format(text2) 
    tex.insert(END,confirmation) 



tex=Text(root) 
tex.pack(side='right') 


inputfield = Entry(root) 
inputfield.pack(side='bottom') 
inputfield.bind('<Return>', callback) 


root.mainloop() 

답변

1

문제는이 줄 가능성이 높습니다 ... 난처한 해요 :

sender = '{}@gmail.com'.format(g_user) 

if 문 조건 (if 'GMail_name:::' in line가) False 다음 g_user 변수가 정의되지 않습니다으로 평가되기 때문에 해당 기능의 지역 범위에서.

0

오류 메시지를 자세히 살펴 보자 :

UnboundLocalError: local variable 'g_user' referenced before assignment 

엄지 손가락의 꽤 좋은 규칙은 오류 메시지가 진실을 말하고 있다고 가정하는 것입니다. 이 경우 그것은 당신에게 매우 중요한 두 가지 사항 말하고있다 :

  • 그것은 g_user을 생각하는 것은 지역 변수 그것은이이 문제를 해결하려면

을 설정하기 전에 g_user가 사용되었다 생각

  • , 당신은 필요 대답 에 대한 질문 중 하나 또는 둘 모두에 대한 대답. 이 로컬 일까, 그리고/또는 이 설정되지 않았다고 생각합니까? 정신적으로 코드를 단계별로 실행한다면 아마도 그 질문 중 하나 또는 둘 모두에 대답하게 될 것입니다.

    예를 들어, 'GMail_name:::' in line이 false를 반환하면 "어떻게 g_user가 설정됩니까?"라는 질문을 던지시겠습니까? if 문이 사실임을 확인 했습니까? 코드가 틀린 부분을 처리 할 준비가 되었습니까? if 문이 사실임을 문자 그대로 증명 했습니까? 아니면 진실이라고 가정하고 있습니까?

    또한이 질문에 답하십시오. INFO.txt의 모든 행을 읽으십니까? 아니면 한 줄을 읽으십니까? 한 줄만 읽는다면 의도적입니까? 사용자 이름과 암호가 줄의 위치 [13:]에 있기를 기대하는 것처럼 보입니다. 두 값이 다르며 두 값이 같은 줄에 있으면 불가능합니다.

    방금 ​​프로그래밍을 배우므로 코드 줄을 파일에 던져서 작동하고 다른 사용자가 문제를 해결하지 못하도록하십시오. 은 컴퓨터가하는 일에 대해라고 생각합니다. 논리적으로 코드를 단계적으로 실행하면 문제가 자명 해집니다.