javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

在同一个catch块中捕获两个异常?

我有一种方法可以抛出两个不同的异常CommuncationExceptionSystemException。在两种情况下,我都执行相同的三行代码块。

try {
 ...
}

catch (CommunicationException ce) {
   ...
}

catch {SystemExcetion se) {
   ... 
}

有可能这样做吗?

try {
   ...
}

catch (CommunicationException ce, SystemException se) {
   ...
}

这样,我就不必编写这么多代码。 我知道我可以将异常处理提取到私有方法,但是由于代码只有3行,因此方法定义将比主体本身花费更多的代码。

trans by 2020-08-12T02:58:32Z

C ++异常类设计

对于一组异常类,什么是好的设计?

我看到了关于哪些异常类应该和不应该做什么的各种内容,但是没有一个简单的设计可以轻松地使用和扩展这些功能。

  1. 异常类不应引发异常,因为这可能直接导致进程终止,而没有机会记录错误等。
  2. 必须有可能获得用户友好的字符串,最好是本地化为其语言的字符串,以便在无法从错误中恢复之前,在应用程序终止自身之前有一些要告诉他们的内容。
  3. 可能需要在堆栈展开时添加信息,例如,如果XML解析器无法解析输入流,能够添加源是来自文件还是通过网络等。
  4. 异常处理程序需要轻松访问处理异常所需的信息。
  5. 将格式化的异常信息写入日志文件(英语,因此此处无翻译)。

使1和4一起工作是我面临的最大问题,因为任何格式和文件输出方法都可能会失败。

编辑:因此,在几个类别中查看了异常类以及与Neil关联的问题之后,似乎完全不考虑项目1(因此忽略了提升建议)似乎是一种惯例,这对我来说似乎是个坏主意。

无论如何,我以为我也会发布我正在考虑使用的异常类。

class Exception : public std::exception
{
    public:
        // Enum for each exception type, which can also be used
        // to determine the exception class, useful for logging
        // or other localisation methods for generating a
        // message of some sort.
        enum ExceptionType
        {
            // Shouldn't ever be thrown
            UNKNOWN_EXCEPTION = 0,

            // The same as above, but it has a string that
            // may provide some information
            UNKNOWN_EXCEPTION_STR,

            // For example, file not found
            FILE_OPEN_ERROR,

            // Lexical cast type error
            TYPE_PARSE_ERROR,

            // NOTE: in many cases functions only check and
            //       throw this in debug
            INVALID_ARG,

            // An error occured while trying to parse
            // data from a file
            FILE_PARSE_ERROR,
        }

        virtual ExceptionType getExceptionType()const throw()
        {
            return UNKNOWN_EXCEPTION;
        }

        virtual const char* what()throw(){return "UNKNOWN_EXCEPTION";}
};


class FileOpenError : public Exception
{
    public:
        enum Reason
        {
            FILE_NOT_FOUND,
            LOCKED,
            DOES_NOT_EXIST,
            ACCESS_DENIED
        };
        FileOpenError(Reason reason, const char *file, const char *dir)throw();
        Reason getReason()const throw();
        const char* getFile()const throw();
        const char* getDir ()const throw();

    private:
        Reason reason;
        static const unsigned FILE_LEN = 256;
        static const unsigned DIR_LEN  = 256;
        char file[FILE_LEN], dir[DIR_LEN];
};

由于所有字符串都通过复制到内部固定大小的缓冲区中进行处理(如果需要则截断,但始终以null终止)来处理点1。

尽管这没有解决第3点,但是我认为无论如何在现实世界中该点的使用都很有限,如果有必要,可以通过抛出新的异常来解决。

trans by 2020-08-12T00:12:27Z

我应该了解C ++中的结构化异常(SEH)?

每个C ++开发人员都应该了解关于结构化异常的哪些重要要点?

trans by 2020-08-09T22:33:46Z

异常处理-如何从“需要”中解救:没有这样的文件可以加载到ruby中?

我正在尝试从``要求''中解救:没有这样的文件可以按顺序加载到ruby中以提示用户指定-I标志,以防他忘记这样做。基本上,代码如下所示:

begin
  require 'someFile.rb'
rescue
  puts "someFile.rb was not found, have you"
  puts "forgotten to specify the -I flag?"
  exit
end

我希望rescue部分可以接管执行,以防找不到2999534193195090090944,但我的假设是错误的。

trans by 2020-08-06T14:24:39Z

异常处理-C ++,__ try和try / catch / finally

我想知道有关C ++ try / catch / finally块的信息。 我看过这些命令带有两个下划线,例如__try。 但是MVSC 2010项目也没有下划线。 那么什么时候需要这些下划线?

trans by 2020-08-03T03:18:54Z

java-如何避免在方法链接中检查空值?

这个问题已经在这里有了答案:

  • 空检查链与捕获NullPointerException 19个答案
  • 避免!=空语句 63个答案

我需要检查某个值是否为null。 如果它不为null,则将一些变量设置为true。 这里没有其他声明。 这样的条件检查太多了。

有什么方法可以在不检查所有方法返回值的情况下处理此空检查?

if(country != null && country.getCity() != null && country.getCity().getSchool() != null && country.getCity().getSchool().getStudent() != null .....) {
    isValid = true;
}

我认为直接检查变量并忽略NullpointerException。 这是一个好习惯吗?

try{
    if(country.getCity().getSchool().getStudent().getInfo().... != null)
} catch(NullPointerException ex){
    //dont do anything.
}
trans by 2020-08-01T12:25:33Z

c ++-无例外,堆栈展开和性能

斯科特·迈耶斯(Scott Meyers)的新C ++ 11书的以下草案说(第2页,第7-21行)

展开调用堆栈和可能展开调用堆栈之间的区别是 对代码生成的巨大影响。 在noexcept函数中,优化器 如果出现异常,则无需将运行时堆栈保持在不可展开状态 从函数中传播出去,也不必确保对象中的对象 如果出现例外,则功能按相反的构造顺序破坏 离开功能。 结果是不仅有更多的优化机会 在noexcept函数的主体内,而且在该函数所在的位置 叫。 这种灵活性仅适用于noexcept功能。 具有的功能 “ throw()”异常规范缺少它,就像完全没有异常规范的函数一样。

相反,“ C ++性能技术报告”的5.4部分描述了实现异常处理的“代码”和“表”方式。 特别地,当不抛出异常时,“表”方法显示为没有时间开销,而只有空间开销。

我的问题是-斯科特·迈耶斯(Scott Meyers)谈论放宽与可能放宽时在谈论什么优化? 为什么这些优化不适用于throw()? 他的评论仅适用于2006 TR中提到的“代码”方法吗?

trans by 2020-07-30T16:09:52Z

异常处理-在C ++中抛出异常后会调用析构函数吗?

我运行了一个示例程序,确实调用了堆栈分配对象的析构函数,但是标准是否可以保证?

trans by 2020-07-29T07:42:31Z

java-以编程方式抛出NullPointerException可以吗?

当存在后置条件时,方法的返回值不能为null,该怎么办?

我可以

assert returnValue != null : "Not acceptable null value";

但是断言可以关闭!

那可以吗

if(returnValue==null)
      {
           throw new NullPointerException("return value is null at method AAA");
      }

?

还是针对此类情况使用用户定义的异常(例如NullReturnValueException)更好?

trans by 2020-07-25T00:56:32Z

如何使用EF6和SQL Server捕获UniqueKey违反异常?

我的一个表具有唯一键,当我尝试插入重复记录时,它会按预期引发异常。 但是我需要将唯一键异常与其他唯一键区别开来,以便可以针对唯一键约束违例自定义错误消息。

我在网上找到的所有解决方案都建议将ex.InnerException强制转换为System.Data.SqlClient.SqlException,并检查ex.InnerException属性是否等于2601或2627,如下所示:

try
{
    _context.SaveChanges();
}
catch (Exception ex)
{
    var sqlException = ex.InnerException as System.Data.SqlClient.SqlException;

    if (sqlException.Number == 2601 || sqlException.Number == 2627)
    {
        ErrorMessage = "Cannot insert duplicate values.";
    }
    else
    {
        ErrorMessage = "Error while saving data.";
    }
}

但是问题是,将ex.InnerException强制转换为System.Data.SqlClient.SqlException会导致无效的强制转换错误,因为ex.InnerException实际上是System.Data.Entity.Core.UpdateException的类型,而不是System.Data.SqlClient.SqlException的类型。

上面的代码有什么问题? 如何捕获唯一键约束违规?

trans by 2020-07-22T05:23:36Z

在Python中引发异常时,如何停止程序?

当Python中引发异常时,我需要停止程序。我该如何实施?

trans by 2020-07-18T08:21:25Z

javascript-异步node.js调用中的错误处理

我对Node.js并不陌生,尽管我通常对JavaScript非常熟悉。 我的问题是关于如何处理node.js中的错误的“最佳实践”。

通常,在对Web服务器,FastCGI服务器或各种语言的网页进行编程时,我在多线程环境中使用带有阻止处理程序的Exceptions。 当有请求进入时,我通常会执行以下操作:

function handleRequest(request, response) {
  try {

    if (request.url=="whatever")
      handleWhateverRequest(request, response);
    else
      throw new Error("404 not found");

  } catch (e) {
    response.writeHead(500, {'Content-Type': 'text/plain'});
    response.end("Server error: "+e.message);
  }
}

function handleWhateverRequest(request, response) {
  if (something) 
    throw new Error("something bad happened");
  Response.end("OK");
}

这样,我始终可以处理内部错误并向用户发送有效响应。

我知道使用node.js可以执行非阻塞调用,这显然会导致各种回调,例如以下示例:

var sys    = require('sys'),
    fs     = require('fs');

require("http").createServer(handleRequest).listen(8124);

function handleRequest(request, response) {

  fs.open("/proc/cpuinfo", "r",
    function(error, fd) {
      if (error)
        throw new Error("fs.open error: "+error.message);

      console.log("File open.");

      var buffer = new require('buffer').Buffer(10);
      fs.read(fd, buffer, 0, 10, null,
        function(error, bytesRead, buffer) {

          buffer.dontTryThisAtHome();  // causes exception

          response.end(buffer);
        }); //fs.read

    }); //fs.open

}

此示例将完全杀死服务器,因为未捕获异常。我的问题是我再也不能使用单个try / catch,因此通常无法捕获在处理请求期间可能引发的任何错误。

当然,我可以在每个回调中添加try / catch,但是我不喜欢这种方法,因为这取决于程序员他不会忘记try / catch。 对于具有许多不同和复杂处理程序的复杂服务器,这是不可接受的。

我可以使用全局异常处理程序(防止整个服务器崩溃),但是由于我不知道哪个请求导致异常,所以我无法向用户发送响应。 这也意味着请求保持未处理/打开状态,浏览器一直在等待响应。

有人有好的坚如磐石的解决方案吗?

trans by 2020-07-08T15:47:39Z

ruby on rails-使用参数引发自定义异常

我正在将Rails中的模型上的自定义异常定义为包装异常:(raise

当我引发Exception时,我想向它传递一些有关以下信息:a)内部函数引发错误的模型实例,以及b)被捕获的错误。

这是一种自动导入模型的方法,该方法由POST请求填充到外部数据源中。

tldr; 假设您自己定义了Exception,如何将参数传递给Exception? 我在该Exception上有一个initialize方法,但是raise语法似乎只接受Exception类和消息,没有将可选参数传递到实例化过程中。

trans by 2020-07-07T16:57:14Z

异常处理-在Golang中捕获恐慌

使用以下代码,如果未提供文件参数,则按预期对第9行os.Args[1]引发恐慌。

当直接传递引起恐慌的东西(os.Args[1])时,我如何才能“捕捉”此恐慌并进行处理? 类似于PHP中的try / catch或Python中的try / except。

我在此处在StackOverflow上进行了搜索,但没有找到任何能回答此类问题的内容。

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open(os.Args[1])
    if err != nil {
        fmt.Println("Could not open file")
    }
    fmt.Printf("%s", file)
}
trans by 2020-07-01T23:49:46Z

如何在Clojure中引发异常?

我希望抛出一个异常并具有以下内容:

(throw "Some text")

但是,它似乎被忽略了。

trans by 2020-07-01T13:21:53Z

异常处理-最终无法在.net try..finally b中执行的条件

基本上,我听说某些条件会导致.net越过finally块。 有谁知道这些条件是什么?

trans by 2020-07-01T07:33:42Z

.net-为什么找不到我的自定义WCF行为扩展元素类型?

我有一个包含两个项目的解决方案。 一个项目是ASP.NET Web应用程序项目,而一个项目是类库。 该Web应用程序具有对类库的项目引用。 这些都不是全名。

在我称为“框架”的类库中,我有一个端点行为(一个IEndpointBehavior实现)和一个配置元素(一个从BehaviorExtensionsElement派生的类)。 配置元素是这样,因此我可以通过配置将端点行为附加到服务。

在Web应用程序中,我具有启用AJAX的WCF服务。 在web.config中,我将AJAX服务配置为使用自定义行为。 配置的system.serviceModel部分非常标准,看起来像这样:

<system.serviceModel>
 <behaviors>
  <endpointBehaviors>
   <behavior name="MyEndpointBehavior">
    <enableWebScript />
    <customEndpointBehavior />
   </behavior>
  </endpointBehaviors>
 </behaviors>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
 <services>
 <service name="WebSite.AjaxService">
  <endpoint
           address=""
           behaviorConfiguration="MyEndpointBehavior"
           binding="webHttpBinding"
           contract="WebSite.AjaxService" />
  </service>
 </services>
 <extensions>
  <behaviorExtensions>
   <add
       name="customEndpointBehavior"
       type="Framework.MyBehaviorExtensionsElement, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </behaviorExtensions>
 </extensions>
</system.serviceModel>

在运行时,这可以完美运行。 启用AJAX的WCF服务正确使用了我自定义配置的端点行为。

问题是当我尝试添加新的AJAX WCF服务时。 如果我执行添加->新建项...,然后选择“启用了AJAX的WCF服务”,则可以看到它添加了.svc文件和代码隐藏,但是在更新web.config文件时,出现此错误:

该配置文件不是WCF服务库的有效配置文件。

无法加载为扩展名“ customEndpointBehavior”注册的类型“ Framework.MyBehaviorExtensionsElement,框架,版本= 1.0.0.0,文化=中性,PublicKeyToken =空”。

显然,该配置完全有效,因为它可以在运行时完美运行。 如果我暂时从行为配置中删除该元素,然后添加启用了AJAX的WCF服务,那么一切都会顺利进行。

不幸的是,在一个较大的项目中,我们将拥有具有各种配置的多个服务,因此暂时删除所有自定义行为将容易出错。 虽然我意识到我可以不使用向导而是手动进行所有操作,但并不是每个人都可以,并且能够按预期使用产品(向导和所有功能)是一件很不错的事情。

为什么找不到我的自定义WCF行为扩展元素类型?

更新/说明:

  • 它确实在运行时起作用,而不仅仅是设计时。
  • 当我尝试添加服务时,Framework程序集位于Web项目的bin文件夹中。
  • 虽然我可以手动添加服务(“无配置”),但我需要开箱即用的项目模板才能工作-这是问题的全部目标。
  • 在Visual Studio 2008中看到了此问题。在VS 2010中,此问题似乎已解决。

我在Microsoft Connect上提交了此问题,结果发现您要么必须将自定义配置元素放在GAC中,要么将其放在IDE文件夹中。 至少目前不会修复。 我已经发布了他们作为此问题的“答案”提供的解决方法。

trans by 2020-06-22T03:30:06Z

.net-Source = nu的ImageSourceConverter错误

我将图像的Source属性绑定到字符串。 该字符串可能为null,在这种情况下,我只是不想显示图像。 但是,我在Debug输出中得到以下信息:

System.Windows.Data错误:23:无法 将'<null>'从类型'<null>'转换为 类型 的“ System.Windows.Media.ImageSource” 默认的“ en-AU”文化 转换; 考虑使用转换器 绑定的属性。 NotSupportedException:'System.NotSupportedException: ImageSourceConverter无法转换 来自(空)。 在 System.ComponentModel.TypeConverter.GetConvertFromException(对象 价值) System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo文化,对象 价值) MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o,键入destinationType, DependencyObject targetElement, CultureInfo文化,布尔值 isForward)'

我希望如果由于杂音而没有显示它,是否有任何抑制方法?

trans by 2020-06-20T11:51:21Z

CodeGo.net>如果在using语句中发生异常,对象是否仍被处置?

如果在using语句中发生异常,该对象是否还会被处置?

我问的原因是因为我试图决定是尝试在整个代码块中还是在内部using语句中进行尝试。 请记住,某些异常会通过设计在catch块中重新抛出。

using (SPSite spSite = new SPSite(url))
{
   // Get the Web
   using (SPWeb spWeb = spSite.OpenWeb())
   {
       // Exception occurs here
   }
}
trans by 2020-06-18T23:08:03Z

我如何在Windows服务中设置.NET UnhandledException处理?

protected override void OnStart(string[] args)
{
    AppDomain.CurrentDomain.UnhandledException +=
        new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    Thread.Sleep(10000);

    throw new Exception();
}

void CurrentDomain_UnhandledException(object sender,
                                      UnhandledExceptionEventArgs e)
{
}

我在Windows服务中的上述代码上附加了调试器,并在CurrentDomain_UnhandledException中设置了一个断点,但从未成功。 弹出异常,说明未处理,然后服务停止。 我什至尝试将一些代码放入事件处理程序中,以防它被优化。

这不是在Windows服务中设置未处理的异常处理的正确方法吗?

trans by 2020-06-18T00:01:50Z

1 2 3 4 5 6 7 8 9 10 11 12 下一页 共12页