0

Tkinter 経由でテキスト メッセージを送信しようとしています。だからあなたは入力しますsms:hello。というテキスト メッセージが送信されますhello。これを行うために、AT&T 電子メール サーバーと GMail を使用して単語を電子メールで送信します。したがって、プログラムINFO.txtは、すべての電子メール認証g_user g_passm_num. 次に、それらを使用して、テキスト メッセージを送信する電子メールを送信します。

今私の問題はそれ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()
4

2 に答える 2

0

エラー メッセージをよく見てください。

UnboundLocalError: local variable 'g_user' referenced before assignment

かなり良い経験則は、エラー メッセージが真実を語っていると仮定することです。この場合、2 つの非常に重要な詳細が示されています。

  • g_userローカル変数だと思います
  • g_user設定前に使用されたと思われる

これを解決するには、これらの質問の一方または両方に理由を答える必要があります。なぜそれがローカルであると考えるのですか、および/またはそれが設定されていないと考えるのはなぜですか? 頭の中でコードを読み進めると、おそらくこれらの質問のいずれかまたは両方に答えることができます。

たとえば、"g_user"'GMail_name:::' in lineが false を返す場合、どのように設定されるのかを自問してみてください。if ステートメントが true であることを確認しましたか? あなたのコードは、false のケースを処理する準備ができていますか? if ステートメントが真であることを文字通り自分自身に証明しましたか、それとも真であると仮定しているだけですか?

また、次の質問にも答えてください。INFO.txt からすべての行を読んでいますか、それとも 1 行だけ読んでいますか? 1 行しか読んでいない場合、それは意図的なものですか? ユーザー名とパスワードの両方が行の位置[13:]にあることを期待しているようですが、両方の値が異なり、両方の値が同じ行にある場合は不可能です。

あなたは今プログラミングを学んでいるので、コード行をファイルに放り込んで、それが機能することを願ったり、他の人にあなたの問題を解決してもらったりしないでください。コンピューターが何をしているかを考えてみてください。コードを論理的にステップ実行すると、問題が自明になります。

于 2013-06-23T16:45:29.437 に答える