相关疑难解决方法(0)

捕获System.Exception等非特定异常是不好的做法?为什么?

我目前正在进行代码审查,以下代码让我跳了起来.我看到这个代码存在多个问题.你是否同意我的观点?如果是这样,我如何向我的同事解释这是错误的(顽固型......)?

  • 捕获一般异常(Exception ex)
  • 使用"if(ex is something)"而不是另一个catch块
  • 我们吃SoapException,HttpException和WebException.但是如果Web服务失败了,那就没那么多了.

码:

try
{
    // Call to a WebService
}
catch (Exception ex)
{
    if (ex is SoapException || ex is HttpException || ex is WebException)
    {
        // Log Error and eat it.
    }
    else
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling exception

13
推荐指数
3
解决办法
6956
查看次数

你应该抓住所有例外吗?

这不是'如何抓住所有例外',而是'你应该抓住所有例外'吗?在C#.NET中,我注意到了大量的异常.是否可以计划捕获每个例外?

例如,DirectoryInfo()构造函数抛出4个异常.我应该计划捕捉这些还是只抓住我能处理的那些?也许让其他人冒泡到Main()我所有的地方,然后告诉用户有一个未捕获的异常.在所有这些可能的例外情况下,您的代码可能会变得比实际代码更多的异常处理.

c#

13
推荐指数
1
解决办法
3007
查看次数

使用TPL进行异常处理

使用TPL/Tasks我可以使用内部try/catch语句执行异常处理:

  Task.Factory.StartNew(
    ()=>
      {
        try
        {
          // Do stuff
        }
        catch
        {
          // Handle exception
        }
      });
Run Code Online (Sandbox Code Playgroud)

或使用ContinueWith,如下所示:

Task.Factory.StartNew(
    ()=>
      {
          // Do stuff
      }).ContinueWith(
        task =>
        {
          if(task.Exception != null)
            // Handle exception
        });
Run Code Online (Sandbox Code Playgroud)

更推荐使用哪种方法?每个人的缺点和优点是什么?

c# task-parallel-library

9
推荐指数
1
解决办法
1375
查看次数

C# 泛型代码膨胀 - 我应该担心吗?

我想问一些关于泛型的问题。

我试图保持代码简单,因此我将创建一个类来处理游戏保存游戏文件的加载/保存。由于游戏的每个部分都有不同的要求,我希望尽可能轻松地访问它:

public void Load<T>(string path, out T obj)
{
    BinaryFormatter bf = new BinaryFormatter();
    using (FileStream file = File.Open(Application.persistentDataPath + path, FileMode.Open))
    {
        obj = (T)bf.Deserialize(file);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以用一个简单的方法来调用它

TurnData x; s.Load("test.txt", out x);
Run Code Online (Sandbox Code Playgroud)

另一种方法是让 Load 函数返回对象,然后将其转换为 TurnData 类型。

TurnData x = (TurnData)s.Load("test.txt");
Run Code Online (Sandbox Code Playgroud)

我对 C# 不太了解。我假设如果打开文件时出现错误,则内部代码using(...) { ... }不会被执行?如果有人能证实这一点那就太好了。我看到的示例代码没有任何错误处理,这对我来说很奇怪,所以我添加了 using?

那么,在这个辅助版本中,函数返回对象而不是使用输出参数,将需要更复杂的代码来进行错误检查并可能返回 null?看起来不太好。

所以真正的问题是......我可以使用我这里的下一个版本吗?或者由于使用泛型而我应该担心吗?

c# generics

2
推荐指数
1
解决办法
1176
查看次数

在Python中,如果函数抛出错误,如何重新运行它

下面是我的代码片段,我想知道的是,假设如果函数 main2() 由于某种原因抛出错误,我如何让我的异常在它中断之前再次运行相同的函数 3 次?

只是在这里补充一下,任何函数都可能会抛出错误(不仅仅是 main2()),而且我可能不仅有 3 个函数,还有更多函数

import numpy as np

def main():
    np.load('File.csv')

def main1():
    np.load('File1.csv')

def main2():
    np.load('File2.csv')

for i in range(1, 10):
    try:
        main()
        main2()
        main3()
    except Exception as e:
        print e
    else:
        break
Run Code Online (Sandbox Code Playgroud)

python error-handling try-except

1
推荐指数
1
解决办法
1万
查看次数