尝试除了不使用电子邮件功能

时间:2018-01-08 10:50:25

标签: python oracle

大家好,我有一段代码,我用来发送电子邮件包,连接到Oracle数据库时出现了某种错误。 Send_Email 函数在Try Except语句之外完美运行,但似乎在Try Except语句中不起作用?

此代码背后的原因是因为Oracle数据库今天崩溃了,我的SQL查询无法运行。我只想创建一个与我的Send_Email函数一起使用的简单Try Except语句,我可以发送自己并通过电子邮件发送错误信息。最初出现的错误是ORA-12514 cx_Oracle.DatabaseError。但无论错误如何,我只想通过电子邮件自动了解异常情况。

import cx_Oracle
import pandas as pd

def Send_Email(to, cc='', bcc='', subject='', body='', attachment='' ):
    import win32com.client
    outlook = win32com.client.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = to
    mail.CC = cc
    mail.BCC = bcc
    mail.Subject = subject
    mail.body = body
    if attachment == '':
        pass
    else:
        mail.Attachments.Add(Source=attachment)
    mail.send


connection = cx_Oracle.connect('username', 'password', 'hostname:port/SERVICENAME')

try:
    df = pd.read_sql_query("SELECT * FROM TABLE", connection)
except cx_Oracle.DatabaseError as e:
    Send_Email(to='myemail@email.com', subject='AUTO: Database Error', body=str(e))
except Exception as e:
    Send_Email(to='myemail@email.com', subject='AUTO: Other Error', body=str(e))
finally:
    print('Working')

1 个答案:

答案 0 :(得分:2)

将您的数据库连接放在这样的尝试中。当它无法连接时,它会在try部分之前发生。

我想注意,在本地计算机上重新测试它的好方法是将您的tnsnames(或用于配置的任何文件)更改为不存在的设置。这样您就可以在不更改代码的情况下测试中断。

try:
connection = cx_Oracle.connect('username', 'password', 'hostname:port/SERVICENAME')
    df = pd.read_sql_query("SELECT * FROM TABLE", connection)
except cx_Oracle.DatabaseError as e:
    Send_Email(to='myemail@email.com', subject='AUTO: Database Error', body=str(e))
except Exception as e:
    Send_Email(to='myemail@email.com', subject='AUTO: Other Error', body=str(e))
finally:
    print('Working')