标签: finally

再试一次神秘

考虑,

        static void Main(string[] args)
        {
            Console.WriteLine(fun());
        }

        static int fun()
        {
            int i = 0;
            try
            {
                i = 1;
                return i;
            }
            catch (Exception ex)
            {
                i = 2;
                return i;
            }
            finally
            {
                i = 3;
            }
        }
Run Code Online (Sandbox Code Playgroud)

示例代码输出"1".但是i的值在finally块中变为3.为什么'i'的值不变为3?

谢谢,

c# finally try-catch

4
推荐指数
2
解决办法
486
查看次数

Bash:最后(尝试,除外)例外

我想在bash脚本的末尾执行一些命令,即使用户按CTRL + C取消其执行.

我知道我可以从另一种编程语言(例如Python)中运行bash脚本,这样我就可以使用'finally'(try-finally)块来执行一些代码.

但是知道StackOverflow是一个交换神话般思想的中心,我问是否有办法在我的bash脚本中做我想做的事情.

那么,想法?

编辑:

我想要的是杀死我的bash中打开的每个进程,即selenium和Xvfb proccesses.

我试着写这个代码:

 trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" EXIT
Run Code Online (Sandbox Code Playgroud)

但这迫使我多次按"CTRL + C",在我的脚本内部每次运行子进程,如:

Testing nsi.bd.helpcenter ...^C:  --  Total time: 0min 0seg
Testing nsi.bibliography ...^C:  --  Total time: 0min 0seg
Testing nsi.digitallibrary ...^C:  --  Total time: 0min 0seg
Testing nsi.digitallibraryinstaller ...^C:  --  Total time: 0min …
Run Code Online (Sandbox Code Playgroud)

bash finally execution

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

为什么finally中的代码会执行,即使它已经在try块中返回?

码:

public String get() {
try {
     //doSomething
     return "Hello";
}
finally {
     System.out.print("Finally");
}
Run Code Online (Sandbox Code Playgroud)

这段代码是如何执行的?

java finally try-catch

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

最终尝试屈服-我们提出了例外吗?

TL; DR

是否可以在finally子句中找到是否存在未捕获的异常?

背景

我想遍历项目以对其进行一些相对昂贵的处理,这很可能会中断并引发异常。所以我想保存我的位置。但是保存状态也非常昂贵-因此,我宁愿不要每次都这样做,只是当我屈服于的代码中有异常时

我在想一些形状模糊的东西:

def get_things(my_iterator):
    for items in my_iterator:
        try:
            yield item
        finally:
            if something_went_wrong():  # magic oracle function for failure
                save_state(item)
        continue_normal_processing()
Run Code Online (Sandbox Code Playgroud)

但我不知道那是否有可能。值得注意的是,except Exception:不会引发任何事情,因为此函数中没有异常。

python yield exception-handling finally

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

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

Java失去了异常

假设我们有以下方法(非常简化的版本):

    void doSomething() {
      try {
        throw new Exception("A");
      } finally {
        throw new Exception("B");
      }
    }
Run Code Online (Sandbox Code Playgroud)

消息"B"的异常在调用方法中被捕获.基本上,有没有办法知道在try块中抛出了哪个异常,如果finally块也抛出一些异常?假设方法doSomething()无法修改.

java exception finally try-catch

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

无论如何在finally语句中获得返回值?

在一些遗留代码中,有几个地方可以返回值.我想记录返回值.是否可以在finally语句中获取返回值?

例如:

try {
   if (v == 1) { 
      return 3;
   } else if (v == 3) {
      return x + 2;
   }
} finally {
   // I need to know the return value here, either 3 or x + 2. 
}
Run Code Online (Sandbox Code Playgroud)

java finally

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

Powershell试试Catch并重试?

我有这个脚本

#Change hostname
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') 
Write-Host "Change hostname " -NoNewLine
$ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Insert the desired computername:', 'Change hostname') 
Write-Host "- DONE" -ForegroundColor DarkGreen -BackgroundColor green -NoNewline
Write-Host " hostname = $ComputerName "
Rename-Computer -NewName $ComputerName
Run Code Online (Sandbox Code Playgroud)

当计算机名称获取空格时,它会失败导致主机名不能有空格.我可以阻止表单有任何空格,或者有人知道如何在重新创建错误时返回到输入框

powershell loops finally try-catch

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

js Promise 上下文中的finally 何时被调用?

js Promise 上下文中的finally 何时被调用?

我一开始以为 thefinally会在最后一个之后被调用then。但后来我明白了,最后的决定是不可能的then。我的下面的尝试也证明了这一点:

function f(resolve, reject) {
    resolve("foo");
};
var p = new Promise(f);
p.then(function(data) {
     console.log("data: " + data); 
});
p.finally(function(data) {
     console.log("in finally");
});
p.then(function(data) {
     console.log("data: " + data); 
});
Run Code Online (Sandbox Code Playgroud)

输出:

data: foo
in finally
data: foo
Run Code Online (Sandbox Code Playgroud)

因此,finally在最后一个之后不会调用then。我认为应该在thenfinally之后调用thethe resolve。但在我上面尝试的示例代码中,我们可以看到情况也并非如此(因为注册then是在resolve和 之间调用的finally)。

因此,我很困惑,不明白什么时候会被finally调用。

javascript finally promise

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

为什么不在这种情况下最终执行?

我有以下代码:

class SampleClass : IDisposable
{

    public void Dispose()
    {
        Console.WriteLine("Execute Dispose!");
    }
}

static void Main(string[] args)
{
    SampleClass sc = new SampleClass();

    try
    {
        throw new Exception();
    }
    finally
    {
        sc.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它不会打印Execute Dispose!消息,为什么会这样?

更新:

如果我像这样更改了代码:

static void Main(string[] args)
{
    SampleClass sc = new SampleClass();

    try
    {
        try
        {
            throw new Exception();
        }
        finally
        {
            sc.Dispose();
        }
    }
    catch
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

它首先打印消息然后崩溃.

我的想法是,如果应用程序崩溃,它可以随意处理吗?

我知道这很简单,但我真的要学到更多东西.

c# finally unhandled-exception

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