标签: throw

奇怪的例外术语"呕吐"

并不是说具有突破性的重要性或任何东西,但我通常会看到人们提到将一个异常从一个方法转发给调用者,因为抛出"up",从技术上讲,它在调用堆栈中向下抛出,对吧?这只是一些程序员的幽默还是什么?或者是否设想调用堆栈正在增长?

exception throw

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

在Java中抛出自定义NumberFormatException

在将一个String月转换为整数时,我试图抛出自己的NumberFormatException.不知道如何抛出异常.任何帮助,将不胜感激.我是否需要在此部分代码之前添加try-catch?我的代码中已有一个代码.

// sets the month as a string
mm = date.substring(0, (date.indexOf("/")));
// sets the day as a string
dd = date.substring((date.indexOf("/")) + 1, (date.lastIndexOf("/")));
// sets the year as a string
yyyy= date.substring((date.lastIndexOf("/"))+1, (date.length()));
// converts the month to an integer
intmm = Integer.parseInt(mm);
/*throw new NumberFormatException("The month entered, " + mm+ is invalid.");*/
// converts the day to an integer
intdd = Integer.parseInt(dd);
/* throw new NumberFormatException("The day entered, " + dd + " is invalid.");*/
// converts …
Run Code Online (Sandbox Code Playgroud)

java throw numberformatexception

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

红宝石的投掷和效率

catch在Ruby中意味着跳出深层嵌套的代码.在Java中,例如可以用Java try-catch来处理异常,但它被认为是不好的解决方案,而且效率也非常低.在Ruby中我们处理异常begin-raise-rescue,我认为将它用于其他任务也很昂贵.

Ruby是否catch-throw真的是一个更有效的解决方案,begin-raise-rescue还是有任何其他理由使用它来打破嵌套块而不是begin-raise-rescue

ruby performance try-catch control-structure throw

5
推荐指数
2
解决办法
1183
查看次数

为什么"动态异常"保证会导致开销?

在C++ 11中,这是不推荐使用的:

void foo() throw();
Run Code Online (Sandbox Code Playgroud)

并替换为

void foo() noexcept;
Run Code Online (Sandbox Code Playgroud)

本文中,我们解释了其中的原因(其中包括归结为同样的事情)

在运行时而不是在编译时检查C++异常规范,因此它们不提供程序员保证已处理所有异常.

虽然这对我有意义,但我不明白为什么throw()首先动态检查,或者为什么noexcept除了调用std::terminate而不是正常的堆栈展开之外不提供异常保证(这实际上不是IMO的坚实保证).

如果发生这种情况,是否有可能在编译期间检查是否抛出异常并且编译失败?我认为,基本上有三种情况:

void foo() noexcept
{
    // 1. Trivial case
    throw myexcept();

    // 2. Try-catch case
    //    Necessary to check whether myexcept is derived
    //    from exception
    try 
    { 
        throw myexcept(); 
    } 
    catch(exception const & e)
    {}

    // 3. Nested function call
    //    Recursion necessary
    bar();
}
Run Code Online (Sandbox Code Playgroud)

使用C++中的模板为每种类型实例化,编译应用程序仍然需要永远 - 所以为什么不改变noexcept以强制编译器检查在编译期间是否抛出异常?

我看到的唯一困难是函数可能会或可能不会根据运行时状态抛出 - 但noexcept在我看来,不应该允许该函数调用自身. …

c++ throw noexcept c++11

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

为什么我不能在方法中抛出异常(Java)

我是Java新手,在抛出异常方面遇到了一些问题.也就是说,为什么这是不正确的

public static void divide(double x, double y){
    if(y == 0){
    throw new Exception("Cannot divide by zero."); 
        //Generates error message that states the exception type is unhanded 
}
else
    System.out.println(x + " divided by " + y + " is " + x/y);
    //other code follows
}
Run Code Online (Sandbox Code Playgroud)

但这样好吗?

public static void divide(double x, double y){
if(y == 0)
    throw new ArithmeticException("Cannot divide by zero.");
else
    System.out.println(x + " divided by " + y + " is " + x/y);
    //other …
Run Code Online (Sandbox Code Playgroud)

java exception block try-catch throw

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

C++ throw()优化

根据优化C++,

对于您确定永远不会抛出异常的函数,使用空的异常规范(即,对声明追加throw()).

如果我知道90%的方法都不会抛出异常怎么办?将throw()附加到所有这些方法似乎是非常规和冗长的.如果没有,有什么好处?或者我在这里误解了什么?

c++ optimization throw

5
推荐指数
2
解决办法
710
查看次数

在Swift中捕获默认错误

我正在尝试学习Swift,并想知道苹果对下面实验的预期答案,该实验在苹果公司GuidedTour游乐场的“ 错误处理”部分中提供,如下所示;

实验:添加代码以在do块内引发错误。您需要引发哪种错误,以便第一个catch块可以处理该错误?那第二块和第三块呢?

enum PrinterError: ErrorType {
    case OutOfPaper
    case NoToner
    case OnFire
}

func sendToPrinter(printerName: String) throws -> String {
    if printerName == "Never Has Toner" {
        throw PrinterError.NoToner
    }
    return "Job sent"
}

do {
    let printerResponse = try sendToPrinter("Gutenberg")
    print(printerResponse)
} catch PrinterError.OnFire {
    print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
    print("Printer error: \(printerError).")
} catch {
    print(error)
}
Run Code Online (Sandbox Code Playgroud)

以下是我对本实验中提出的问题的回答,它们似乎都可以起作用...

您需要引发哪种错误,以便第一个catch块可以处理该错误? …

exception try-catch throw ios swift

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

如何抛出InvalidArgumentException JavaScript?

目的

在JavaScript方法中抛出InvalidArgumentException,就像在Java或类似语言中一样.

背景

我一直在努力熟悉JavaSctipt错误处理,我知道我可以使用throw关键字抛出异常.

为此,我还阅读了MDN上throw文档和MDN上Error文档.

问题

到目前为止这是我的代码:

if (mySize >= myArray.length)
    throw new Error("InvalidArgumentExcpetion - BANG!!!!");
Run Code Online (Sandbox Code Playgroud)

这段代码对我来说有些问题:

  1. 我在异常中有文本.现在我有BANG,但明天我可能想要BONG,如果我决定改变它,我必须到处寻找!
  2. 我使用的是Error,而不是真正的InvalidArgumentExcpetion类型的新对象.这是正确的方法吗?

问题

所以现在我很困惑.

  1. 我应该像throw文档中那样创建一个新对象,还是创建一条错误消息?
  2. JavaScript没有我可以使用的InvalidArgumentException对象吗?
  3. 我应该如何进行以便采用可维护的方式抛出使用ECMA6的错误?

javascript error-handling exception throw

5
推荐指数
3
解决办法
8289
查看次数

引发错误时函数返回什么?

我正在阅读《面向Web开发人员的专业Javascript》一书,并看到了以下代码。我对此有一些疑问:

  1. “ throw new Error()”返回什么?未定义?
  2. 如果抛出错误,“ if”的代码块将如何处理?

function matchesSelector(element, selector){

  if(element.matchesSelector){
      return element.matchesSelector(selector);
  }else if(element.msMatchesSelector){
      return element.msMatchesSelector(selector);
  }else if(element.mozMatchesSelector){
      return element.mozMatchesSelector(selector);
  }else if(element.webkitMatchesSelector){
      return element.webkitMatchesSelector(selector);
  }else{
    throw new Error("Not supported!");
  }
}


if(matchesSelector(document.body, "body.page1")){
  //do somthing
}
Run Code Online (Sandbox Code Playgroud)

javascript return throw

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

如何替换动态异常规范:throw(...)

我正在使用遗留库的项目上工作,该遗留库使用函数定义如

void func() throw(some_exception);
Run Code Online (Sandbox Code Playgroud)

由于动态异常规范在C ++ 17中已删除,所以我想知道如何解决此问题。

  1. P0003R0建议更换

    void func() throw(some_exception)
    {
        /* body */ 
    }
    
    Run Code Online (Sandbox Code Playgroud)

    用类似的东西

    void func()
    {
        try
        {
            /* body */
        }
        catch(const some_exception&) {
           throw;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但是,我无权访问源代码(仅头文件)。

  2. 因此,我只能尝试“修复”标头中的函数定义。所以例如我可以写

    void func() noexcept(false);
    
    Run Code Online (Sandbox Code Playgroud)

    但是,当函数引发异常时,我的应用程序仍会终止。

如何更改头文件中的函数定义或可能调整我自己的项目(我使用的地方func)以获得与throw(some_exception)C ++ 17之前相同的行为?

c++ exception throw c++17

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