在Python中,有这样有用的异常处理代码:
try:
# Code that could raise an exception
except Exception:
# Exception handling
else:
# Code to execute if the try block DID NOT fail
我认为能够分离代码是很有用的could从正常代码中引发和异常。在 Python 中,这是可能的,如上所示,但是我在 C# 中找不到类似的东西。
假设该功能或类似功能不存在,将普通代码放入try
块或之后catch
block?
我问的原因是因为我有以下代码:
if (!IsReadOnly)
{
T newobj;
try
{
newobj = DataPortal.Update<T>(this);
List<string> keys = new List<string>(BasicProperties.Keys);
foreach (string key in keys)
{
BasicProperties[key] = newobj.BasicProperties[key];
}
}
catch (DataPortalException)
{
// TODO: Implement DataPortal.Update<T>() recovery mechanism
}
}
这要求正常代码位于 try 块中,否则如果引发异常并随后进行处理,newobj
会被取消分配,但是在 try 块中包含这么多与以下内容无关的代码感觉很不自然DataPortalException
。该怎么办?
Thanks
我更愿意看到 try/catch 之外的其余代码,以便清楚您尝试捕获的异常来自何处,并且您不会意外捕获您不想捕获的异常。
我认为与 Python try/catch/else 最接近的等效是使用本地布尔变量来记住是否抛出异常。
bool success;
try
{
foo();
success = true;
}
catch (MyException)
{
recover();
success = false;
}
if (success)
{
bar();
}
但是,如果您这样做,我会问为什么您不完全从异常中恢复,以便可以像成功一样继续,或者通过返回错误代码完全中止,甚至只是让异常传播给来电者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)