Search code examples
pythonexceptionsmtpsmtplib

should return outside finally and is the exception handled perfectly?


Should I not put the return from this method below in finally ? Pylint gives error for this saying: 3: return statement in finally block may swallow exception (lost-exception)

def sendMessage(self, subject, msgContent, files, mailto):
    """ Send the email message

        Args:
            subject(string): subject for the email
            msgContent(string): email message Content
            files(List): list of files to be attached
            mailto(string): email address to be sent to
    """

    msg = self.prepareMail(subject, msgContent, files, mailto)

    # connect to server and send email
    server=smtplib.SMTP(self.smtpserver, port=self.EMAIL_PORT)
    server.ehlo()
    # use encrypted SSL mode
    server.starttls()
    # to make starttls work
    server.ehlo()
    server.login(self.usrname, self.password)
    server.set_debuglevel(self.debug)
    try:
        failed = server.sendmail(self.mailFrom, mailto, msg.as_string())
    except Exception as er:
        print er
    finally:
        server.quit()
        if failed:
            return False
        return True

Solution

  • alright, I fixed the problem, @Nabla pointed the right!!

    def sendMessage(self, subject, msgContent, files, mailto):
        """ Send the email message
    
            Args:
                subject(string): subject for the email
                msgContent(string): email message Content
                files(List): list of files to be attached
                mailto(string): email address to be sent to
        """
    
        msg = self.prepareMail(subject, msgContent, files, mailto)
    
        # connect to server and send email
        server = smtplib.SMTP(self.smtpserver, port=self.EMAIL_PORT)
        server.ehlo()
        # use encrypted SSL mode
        server.starttls()
        # to make starttls work
        server.ehlo()
        server.login(self.usrname, self.password)
        server.set_debuglevel(self.debug)
        try:
            server.sendmail(self.mailFrom, mailto, msg.as_string())
        except Exception as er:
            print er
            return False
        finally:
            server.quit()
        return True