Python - 忽略日志异常
Python - ignore exception for log
我有这个方法:
def get_sftp_connection(self, log_error=True):
self.ensure_one()
login = self.login_id
LogCustom = self.env['log.custom']
try:
transport = Transport((login.host, login.port))
transport.connect(username=login.user, password=login.passwd)
sftp = SFTPClient.from_transport(transport)
except socket.gaierror:
msg = _("Name or service '%s' not known") % (login.host)
if log_error:
LogCustom.log_error_event(operation='read', ref=self._get_rec_description(), name=msg)
raise ValidationError(msg)
return sftp
如果发生异常,我想在数据库中创建日志记录。但 python/psycopg2 似乎回滚任何更改,因为异常。当我检查日志是否在 raise
发生之前创建时。是的,但是在 raise 之后一切都回滚了。
是否可以raise
同时在数据库中创建日志?就像在一些不同的事务或其他东西中包装日志创建(这样可以避免回滚)
如果选中日志记录选项,我选择跳过加薪,这样我就可以在数据库中创建日志。虽然我不得不调整代码以期望 None
可以从此方法返回。
这实际上是一种解决方法。如果有更好的完整proof/safe解决方案,请post作为答案。
def get_sftp_connection(self, log_error=True):
self.ensure_one()
login = self.login_id
LogCustom = self.env['log.custom']
ref = self._get_rec_description()
try:
transport = Transport((login.host, login.port))
transport.connect(username=login.user, password=login.passwd)
sftp = SFTPClient.from_transport(transport)
except socket.gaierror:
msg = _("Name or service '%s' not known") % (login.host)
if log_error:
LogCustom.log_warning_event(operation='read', ref=ref, name=msg)
return None
else:
raise ValidationError(msg)
return sftp
我有这个方法:
def get_sftp_connection(self, log_error=True):
self.ensure_one()
login = self.login_id
LogCustom = self.env['log.custom']
try:
transport = Transport((login.host, login.port))
transport.connect(username=login.user, password=login.passwd)
sftp = SFTPClient.from_transport(transport)
except socket.gaierror:
msg = _("Name or service '%s' not known") % (login.host)
if log_error:
LogCustom.log_error_event(operation='read', ref=self._get_rec_description(), name=msg)
raise ValidationError(msg)
return sftp
如果发生异常,我想在数据库中创建日志记录。但 python/psycopg2 似乎回滚任何更改,因为异常。当我检查日志是否在 raise
发生之前创建时。是的,但是在 raise 之后一切都回滚了。
是否可以raise
同时在数据库中创建日志?就像在一些不同的事务或其他东西中包装日志创建(这样可以避免回滚)
如果选中日志记录选项,我选择跳过加薪,这样我就可以在数据库中创建日志。虽然我不得不调整代码以期望 None
可以从此方法返回。
这实际上是一种解决方法。如果有更好的完整proof/safe解决方案,请post作为答案。
def get_sftp_connection(self, log_error=True):
self.ensure_one()
login = self.login_id
LogCustom = self.env['log.custom']
ref = self._get_rec_description()
try:
transport = Transport((login.host, login.port))
transport.connect(username=login.user, password=login.passwd)
sftp = SFTPClient.from_transport(transport)
except socket.gaierror:
msg = _("Name or service '%s' not known") % (login.host)
if log_error:
LogCustom.log_warning_event(operation='read', ref=ref, name=msg)
return None
else:
raise ValidationError(msg)
return sftp