Найти - Пользователи
Полная версия: Обработка исключения
Начало » Python для новичков » Обработка исключения
1 2
Passer
Есть следующий скрипт

import os
import re
import smtplib
from email.mime.text import MIMEText
import time
import urllib.request

# Fill the next parameters

# SMTP server
smtp_server = "smtp.inbox.ru"
# SMTP port
smtp_port = 25
# SMTP login
smtp_address = "vatnika@inbox.ru"
# SMTP password
smtp_password = "35692858f"
# Email topic
email_topic = "Topic"
# Mail body
mail_body = "Spam message."
############################

usedEmails = []
num = 0

while True:
u = urllib.request.urlopen("http://otvet.mail.ru/drama/")
page = u.read()

emailPattern = r"[0-9a-zA-Z_\-\.]+@[0-9a-z-A-Z\.]+\.[a-zA-Z]+"
patternRe = re.compile(emailPattern)
page=str(page)

for address in patternRe.findall(page):
if not address in usedEmails:
num = num + 1
msg = MIMEText(mail_body + address, "", "utf-8")
msg['From'] = smtp_address
msg['To'] = address
msg['Subject'] = email_topic
mailServer = smtplib.SMTP(smtp_server, smtp_port)
mailServer.login(smtp_address, smtp_password)
mailServer.sendmail(smtp_address, address, msg.as_string())
mailServer.close()
print(num, address)
usedEmails.append(address)
time.sleep(15)
При запуске выдаёт ошибку

Traceback (most recent call last):
File "C:\py3eg\spamer.otvet.mail.ru.py", line 52, in <module>
mailServer.sendmail(smtp_address, address, msg.as_string())
File "C:\Python32\lib\smtplib.py", line 742, in sendmail
raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
Как обрабатывать такие исключения?
fanatid
Точно так же, как и другие.
Поймать все исключения:
try:
{your code}
except Exception as e:
print e
И определенное для данного случая (работает быстрее, т.к. проверяется только принадлежность только к определенному типу исключений)
try:
{your code}
except smtplib.SMTPDataError as e:
print e
Если нужно реагировать на все исключения из smtplib, тогда smtplib.SMTPException
Passer
Пишу
try:
{your code}
except Exception as e:
print e
интерпретатор выдаёт ошибку invalid syntax и выделяет “е” в строке “print e”.
krot
Если python 3, то
print(e)
fanatid
В 3 ветке print является функцией, соответсвенно должно быть print(e).
fanatid
krot
Если python 3, то
print(e)
У него третий, в первом сообщении в исключении, путь к третему указан.
Passer
Работает, но теперь программа пытаясь послать письмо на найденный почтовый ящик xfb@Mail.Ru не может это сделать и пытается снова и снова отправить на этот ящик письмо.

Интерпретатор выдаёт:
(550, b'Message was not accepted -- invalid mailbox.  Local mailbox xfb@Mail.Ru is unavailable: user not found')
(550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
(550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
...
Нужно чтобы если в процессе работы программы появляется ошибка smtplib.SMTPDataError программа искала следующий ящик и пыталась отправить сообщение на него.
py.user.next
    try:
mailServer.sendmail(smtp_address, address, msg.as_string())
except smtplib.SMTPDataError as e:
if e[0] == 550: # возможно, по-другому надо доставать, типа e.errno
print('wrong address {0}'.format(address))
continue
nerijus
fanatid
Поймать все исключения:
Хорошо что у вас хотя бы “print e” а не “pass”. Но все ровно толку от этого кода никакого. И рано или поздно такие заглушки приведет к беде. Взять весь код в try-except да еще обрабатывать только Exception это как страусу воткнуть голову в землю.
Passer
py.user.next
    try:
mailServer.sendmail(smtp_address, address, msg.as_string())
except smtplib.SMTPDataError as e:
if e[0] == 550: # возможно, по-другому надо доставать, типа e.errno
print('wrong address {0}'.format(address))
continue
Зачем здесь ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB