Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 29, 2012 15:31:23

carlos0n
От:
Зарегистрирован: 2012-02-29
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

Нужна помощь в исправлении ошибки
исходный код

import poplib, email, email.header

class pop3_email:
def __init__(self, _server, _username, _password):
self.server=_server
self.username=_username
self.password=_password
self.p = poplib.POP3(self.server)
self.p.getwelcome()
self.p.user(self.username)
self.p.pass_(self.password)

def getmessages(self):
response, lst, octets = self.p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:print "Сообщение %(msgnum)s имеет длину %(msgsize)s" % vars()
print "UIDL =", self.p.uidl(int(msgnum)).split()[2]
for i in range(1, int(msgnum)+1):
if int(msgsize) > 32000:(resp, message, octets) = self.p.top(i, 0)
else:(resp, message, octets) = self.p.retr(i)
msgtxt = "\n".join(message)+"\n\n"
msg = email.message_from_string(msgtxt)
for i in email.header.decode_header("* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n" % msg):
enc = i[1]
if enc:
print i[0].decode(enc)
else:
print i[0]
print getbodyfromemail(msg)
print self.p.quit()

def getcharsets(msg):
charsets = set({})
for c in msg.get_charsets():
if c is not None:
charsets.update([c])
return charsets

def handleerror(errmsg, emailmsg,cs):
print()
print(errmsg)
print("This error occurred while decoding with ",cs," charset.")
print("These charsets were found in the one email.",getcharsets(emailmsg))
print("This is the subject:",emailmsg['subject'])
print("This is the sender:",emailmsg['From'])

def getbodyfromemail(msg):
body = None
if msg.is_multipart():
for part in msg.walk():
if part.is_multipart():
for subpart in part.walk():
if subpart.get_content_type() == 'text/plain':
body = subpart.get_payload(decode=True)
elif part.get_content_type() == 'text/plain':
body = part.get_payload(decode=True)
elif msg.get_content_type() == 'text/plain':
body = msg.get_payload(decode=True)
for charset in getcharsets(msg):
try:
body = body.decode(charset)
except UnicodeDecodeError:
handleerror("UnicodeDecodeError: encountered.",msg,charset)
except AttributeError:
handleerror("AttributeError: encountered",msg,charset)
return body
при попытке выполнить
>>> cl=pop3_email(“***”,“***”,“***”)
>>> cl.getmessages()

вместо *** введите реальные данные, сервер, пользователя и пароль
вылазит ошибка
NameError: global name ‘getbodyfromemail’ is not defined
и я чет не как не могу её исправить и вообще понять отчего она возникает, видимо надо как то объявить функцию, подскажите как..
я изучаю python меньше недели и пока не разобрался во всём.
заранее спасибо.



Офлайн

#2 Фев. 29, 2012 15:40:39

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

getbodyfromemail => self.getbodyfromemail



Офлайн

#3 Фев. 29, 2012 16:48:36

carlos0n
От:
Зарегистрирован: 2012-02-29
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

я правильно понимаю, что надо сделать так

def __init__(self, _server, _username, _password):
self.server=_server
self.username=_username
self.password=_password
self.p = poplib.POP3(self.server)
self.p.getwelcome()
self.p.user(self.username)
self.p.pass_(self.password)
self.getbodyfromemail
и вызывать так
...
self.getbodyfromemail(msg)
...
просто так у меня вылазит такая ошибка))
и она же, если убрать self.getbodyfromemail в начале
TypeError: getbodyfromemail() takes exactly 1 argument (2 given)



Офлайн

#4 Фев. 29, 2012 17:27:01

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

getbodyfromemail это метод класса. По этому к нему надо обращаться через self.

print getbodyfromemail(msg) # Сейчас
print self.getbodyfromemail(msg) # Надо



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Фев. 29, 2012 19:48:38

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

def getbodyfromemail(self,msg):
не теряйте self



Офлайн

#6 Март 1, 2012 05:08:42

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

ошибка global name is not defined при вызове функции

И это относится (sp3 писал выше) не только для getbodyfromemail, но и для других функций getcharsets, handleerror

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version