标签: throw

什么是"扔"

任何人都可以解释我使用抛出异常处理?抛出异常会发生什么?

c# exception-handling throw

3
推荐指数
2
解决办法
366
查看次数

在函数中使用throw关键字会产生带有gcc的警告

我需要找到一种方法(请使用C++ 03,不能使用C++ 11)来删除gcc对以下(伪)代码产生的警告:

#include <stdexcept>

void throw_invalid()
{
  throw std::invalid_argument( "invalid" );
}

int foo(const char * str)
{
  if( str ) return 42;
  throw_invalid();
  // insert portable -fake- code that will get optimized away
}
Run Code Online (Sandbox Code Playgroud)

我的代码需要至少在gcc 5.x(-Wall)和Visual Studio上免费警告.我的throw_invalid功能是避免锅炉板代码,并将异常集中在与无效参数相关的单个函数中.

目前的警告是:

$ g++ -Wall -c foo.cxx 
b.cxx: In function ‘int foo(const char*)’:
b.cxx:13:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
Run Code Online (Sandbox Code Playgroud)

我想避免添加假return -1(从未到达),因为它使代码更难阅读.

c++ portability gcc throw

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

Javascript Generator throw()方法可提高迭代器?

我知道使用next()方法将迭代器前进到yield关键字的下一个位置,并返回包含yield表达式结果的对象,如下所示:

产量增加一倍(40);=>调用iterator.next()将返回类似{done:false,value:80}的信息

但是,我不太清楚throw()方法是否还会将迭代器前进并返回下一个yield的表达式,除了将异常抛出到生成器中。文档说像这样:

throw()方法通过向生成器中抛出错误来恢复生成器的执行,并返回一个对象,该对象具有完成的两个属性和值。

当我们调用iterator.throw()时,是否会将异常抛出到生成器中(正确捕获了异常),并前进到下一个yield关键字并返回yield表达式的结果?

请让我知道是否需要包含代码片段来演示这一点,因为这是我在Stackoverflow上的第一篇文章。

谢谢!!!

javascript generator throw

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

Powershell抛出数据异常

如何在PowerShell中使用'throw'方向来抛出自定义数据对象的异常?说,它能做到吗?:

throw 'foo', $myData
Run Code Online (Sandbox Code Playgroud)

那么数据可以用在'catch'逻辑中:

catch {
    if ($_.exception.some_property -eq 'foo') {
        $data = $_.exception.some_field_to_get_data
        # dealing with data
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
我的目的是知道是否有一个简短而酷的语法来抛出异常(没有显式创建我自己的类型),其名称我可以通过其名称来决定并在'catch'块中处理它的数据.

powershell exception throw

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

异步方法中的奇怪调试器行为

当我在代码中跨越断点时,我遇到了调试器的奇怪行为:

public async Task DoSomeWork()
{
     await Task.Run(() => { Thread.Sleep(1000); });

     var test = false;
     if (test)
     {
          throw new Exception("Im in IF body!");
     }
}
Run Code Online (Sandbox Code Playgroud)

调试器进入if正文.值得注意的是,异常并没有被抛出,只是看起来就是这样.因此,如果您正确放置断点,则无法重现throw.你必须将它放在上面并向下走到if身体才能抓住它.同样适用于任何类型的异常实例(以及显式null),甚至可以return代替throw.

除此之外它即使我删除行也可以工作await.

我试图从不同的PC运行此代码片段,因此它不是PC的麻烦.另外我认为它是VS代码中的错误,并试图在JetBrains的Rider中运行它 - 结果相同.

我确定这是异步的事情,但它是如何明确地起作用的?

c# debugging asynchronous return throw

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

Java - 以相同的方法抛出和捕获

我在理解现有代码时遇到问题。我想知道 Java 如何管理抛出异常并以相同的方法捕获它。我在其他问题中找不到它,所以我准备了一个例子。在 Java 中运行下面的代码会输出什么?

public static void main(String [ ] args) {
     try{
         System.out.println("1");
         method();
     }
     catch(IOException e) {
         System.out.println("4");
     }
}

public static void method() throws IOException {
     try {
         System.out.println("2");
         throw new IOException();
     }
     catch(IOException e) {
         System.out.println("3");
     }
 }
Run Code Online (Sandbox Code Playgroud)

它会是1 2 3还是1 2 4

java exception try-catch throw

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

异常抛出类型为"Nothing"?

如此处所述 - Scala编程的第7章,内置控制结构,7.4使用try表达式进行异常处理:

在Scala中,throw是一个具有结果类型的表达式.

从技术上讲,异常抛出类型Nothing.你可以使用throw作为表达式,即使它实际上永远不会评估任何东西.这一点技术体操可能听起来很奇怪,但在前面的例子中经常有用.if的一个分支计算一个值,而另一个分支抛出异常并计算Nothing.整个if表达式的类型是那个计算某事物的分支的类型.

例子是:

val half =
  if (n % 2 == 0)
    n / 2
  else
    throw new RuntimeException("n must be even")
Run Code Online (Sandbox Code Playgroud)

然后我去Scala尝试:

scala> val n = 1
n: Int = 1

scala> val half = if (n % 2 == 0) n / 2 else throw new RuntimeException("n must be even")
java.lang.RuntimeException: n must be even
  ... 29 elided

scala> half
<console>:12: error: not found: value half
       half
       ^
Run Code Online (Sandbox Code Playgroud)

据说half …

scala exception throw

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

扔进C#里面的Catch

昨天找到的东西让我意识到我很可能仍然缺少关于C#的基本花絮.

我有一个无状态服务结构应用程序.我在主循环中有一个尝试捕获.如果我在这个循环中抛出一个异常,它会跳出while循环并且服务有效地停止.如果我throw向catch子句添加一个,则服务将重新启动.

    protected override async Task RunAsync(CancellationToken cancellationToken)
    {
        try
        {
            long iterations = 0;
            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();

                await Task.Delay(TimeSpan.FromSeconds(3), cancellationToken).ConfigureAwait(false);

                // Do stuff...

                if (iterations > 4) {
                    throw new Exception();
                } 

                ServiceEventSource.Current.ServiceMessage(this.Context, $"Working-{++iterations}");
            }
        }
        catch (Exception ex)
        {
            // Log stuff...
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这是或指示我到哪里可以得到答案?我找不到任何可以解释这种行为的东西.

编辑:这不是重复是什么"投掷"和"投掷前"之间有什么区别?因为,据我所见,它没有解释我的问题,为什么函数再次运行.该主题更多的是解释之间的区别throwthrow new各自的堆栈跟踪.

c# throw rethrow

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

GoogleTest:EXPECT_THROW捕获不同类型?

我正在尝试测试 EXPECT_THROW,如下所示。

#include <gtest/gtest.h>
int Foo(int a, int b){
    if (a == 0 || b == 0){
        throw "don't do that";
    }
    int c = a % b;
    if (c == 0)
        return b;
    return Foo(b, c);
}
TEST(FooTest, Throw2){
    EXPECT_THROW(Foo(0,0), char*);
}
int main(int argc, char* argv[]){
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

我预计“Throw2”应该成功。但它给出了这个错误信息:

Expected: Foo(0,0) throws an exception of type char*.
Actual: it throws a different type.
Run Code Online (Sandbox Code Playgroud)

那么这里抛出的类型是什么?

c++ testing googletest throw

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

Jest 的匹配器错误:接收到的值必须是一个函数

我正在前端工作,并测试我的库,我收到一个预期的错误,但我无法做出断言。我有下一个代码:

it('If the username is not entered, I get an error', () => {
    try {
      new SDK('test', {
        password: 'aaaabbbbcccc',
        key: 'ddddeeefff',
      });
    } catch (error) {
      expect(error).toThrow(
        `Error: The 'username' property has not been entered`
      );
    }
  });
Run Code Online (Sandbox Code Playgroud)

如您所见,为了对我的库进行身份验证,我需要:用户名、密码和密钥。这是我得到的错误:

在此输入图像描述

谢谢你!

javascript matcher throw jestjs

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