大家好,我有一段代码,我用来发送电子邮件包,连接到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')
答案 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')