如何防止python中的名称错误错误?

Eri*_*ikT 2 python

当我运行我的程序core.py(http://pastebin.com/kbzbBUYd)时,它返回:

文件"core.py",第47行,在texto core.mail(numbersendlist,messagetext)中NameError:全局名称'core'未定义

谁能告诉我发生了什么以及如何阻止这个错误?

如果有帮助,core.py中的"import carrier"行指的是carrier.py(http://pastebin.com/zP2RHbnr)

Imr*_*ran 6

您正在获取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.')
Run Code Online (Sandbox Code Playgroud)