在 Python 中,有一段有用的异常处理代码:
try:
# Code that could raise an exception
except Exception:
# Exception handling
else:
# Code to execute if the try block DID NOT fail
我认为能够将可能 引发的代码和异常代码与您的正常代码分开是很有用的。在 Python 中,这是可能的,如上所示,但是我在 C# 中找不到类似的东西。
假设该功能或类似功能不存在,将普通代码放在 try
block 中或 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 block 中,否则如果引发异常并随后处理,newobj
将被取消分配,但是在 try 中有这么多代码感觉很不自然与 DataPortalException
无关的 block 。怎么办?
谢谢
最佳答案
我更希望看到 try/catch 之外的其余代码,这样可以清楚地知道您试图捕获的异常来自哪里,并且您不会意外地捕获到您没有 try catch 的异常捕获。
我认为与 Python try/catch/else 最接近的等效项是使用本地 bool 变量来记住是否抛出异常。
bool success;
try
{
foo();
success = true;
}
catch (MyException)
{
recover();
success = false;
}
if (success)
{
bar();
}
但是如果你这样做,我会问你为什么不从异常中完全恢复,这样你就可以像成功一样继续,或者通过返回错误代码甚至只是让异常传播给调用者。
关于C#:等效于 python try/catch/else block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375794/