C#:等效于 python try/catch/else block

标签 c# python exception try-catch

在 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/

相关文章:

android - 自定义 SurfaceView 导致 NoSuchMethodException

c# - 系统 namespace 在全新安装时缺少 MonoDevelop

c# - Asp.Net Core SPA 与分离解决方案(Asp.Net Core WebApi + Web 应用程序)

python - 无法从 'keras.optimizers' 导入 SGD 和 Adam

python - 在 python 中通过代理套接字

python - Xcode 中的纯 Python

java - 抛出异常会改变它的状态吗?

c# - 使用InternalsVisibleTo属性时的混淆?

c# - 近似字符串比较

android - 内存不足错误 : bitmap size exceeds VM budget (Android)