我有一个包裹mylib.Error
的库。好的设计要求它应该隐藏其客户的所有pyodbc知识。这也意味着客户应该处理pyodbc.Error
而不是pyodbc.Error
。最重要的是,只需在mylib
中抓取mylib.Error
并将其替换为import pyodbc
class DataTruncated(pyodbc.DataError):
pass
def execute(sql):
dbcursor = pyodbc.connect(database="mydb").cursor()
try:
dbcursor.execute(sql)
except pyodbc.Error as e:
if 'truncated' in e.args[1]:
e.__class__ = DataTruncated
raise
就很难看了,因为追溯显示的是级联异常,而不仅仅是一个:
pyodbc.DataError :( ...字符串或二进制数据将被截断...')
在处理上述异常期间,发生了另一个异常:
追踪(最近一次呼叫最后一次):...
因此,隐藏血腥细节的最佳方法是转换异常:
<input type='hidden' name='lang' value='@Path.GetFileName(Server.MapPath(VirtualPath))' />
<input type='submit' value='send'>
有没有更好的方法来解决这个问题?