Как я могу предотвратить ошибку имени в Python? - PullRequest
2 голосов
/ 28 февраля 2010

Когда я запускаю свою программу core.py (http://pastebin.com/kbzbBUYd), возвращается:

Файл "core.py", строка 47, в текстовом режиме core.mail (numbersendlist, messagetext) NameError: глобальное имя 'core' не определено

Может кто-нибудь сказать мне, что происходит и как я могу остановить эту ошибку?

Если это помогает, строка «importrier» в core.py ссылается на carrier.py (http://pastebin.com/zP2RHbnr)

Ответы [ 2 ]

6 голосов
/ 28 февраля 2010

Вы получаете NameError Поскольку в вашем коде не определено такое имя core в локальной или глобальной области видимости. Сначала создайте Core объект перед вызовом его методов.

Также отступ texto(), вероятно, неправильный. Вы не сможете использовать эту функцию из остальной части модуля. Если вы хотите использовать его из других частей текущего модуля или из других модулей, объявите функцию на уровне модуля или используйте декоратор @staticmethod, если хотите сделать его статическим методом класса.

Это должно работать.

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import carrier

class Core:    
    def __init__(self, username, password):
        # code could be added here to auto load these from a file
        self.gmail_user = username
        self.gmail_pwd = password

# Send one text to one number
# TODO: send to multiple addresses

    def mail(self, to, text):
       msg = MIMEMultipart()
       msg['From'] = self.gmail_user
       msg['To'] = to
       msg.attach(MIMEText(text))

       mailServer = smtplib.SMTP("smtp.gmail.com", 587)
       mailServer.ehlo()
       mailServer.starttls()
       mailServer.ehlo()
       mailServer.login(self.gmail_user, self.gmail_pwd)
       mailServer.sendmail(self.gmail_user, to, msg.as_string())
       # Should be mailServer.quit(), but that crashes...
       mailServer.close()


def texto(sendtoaddress, messagetext):
    numbersendlist = []
    for number in sendtoaddress:
        numbersendlist.append(carrier.carriercheck(number))

    core = Core('username', 'password')
    for number in numbersendlist:
        core.mail(number, messagetext)

texto(['1112223333'], 'hi. this better work.')
1 голос
/ 28 февраля 2010

core - это не то имя, которое вы уже определили. Я ожидаю, что вы намеревались написать что-то вроде

core = Core('username', 'password')

перед звонком texto?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...