考虑,
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?
谢谢,
我想在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) 码:
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
Run Code Online (Sandbox Code Playgroud)
这段代码是如何执行的?
是否可以在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:不会引发任何事情,因为此函数中没有异常。
我想知道finally块内的代码和finally块后的代码有什么区别
假设我们有以下方法(非常简化的版本):
void doSomething() {
try {
throw new Exception("A");
} finally {
throw new Exception("B");
}
}
Run Code Online (Sandbox Code Playgroud)
消息"B"的异常在调用方法中被捕获.基本上,有没有办法知道在try块中抛出了哪个异常,如果finally块也抛出一些异常?假设方法doSomething()无法修改.
在一些遗留代码中,有几个地方可以返回值.我想记录返回值.是否可以在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) 我有这个脚本
#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)
当计算机名称获取空格时,它会失败导致主机名不能有空格.我可以阻止表单有任何空格,或者有人知道如何在重新创建错误时返回到输入框
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调用。
我有以下代码:
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)
它首先打印消息然后崩溃.
我的想法是,如果应用程序崩溃,它可以随意处理吗?
我知道这很简单,但我真的要学到更多东西.