在我看到異常(C++,Java,Javascript,Python,PHP等)的語言中,我總是看到try
或類似的東西來標記catch
的範圍。我想知道是否有必要。 try
塊有什麼設計問題?語言設計(例外):爲什麼`嘗試`?
例如,藉此:
try{
try{
do_something_dangerous0();
}catch (SomeProblem p){
handle(p);
}
try{
do_something_dangerous1();
}catch (SomeProblem p){
handle(p);
}
}catch (SomeOtherProblem p){
handle(p);
}
我想象這作爲替代。
do_something_dangerous0();
catch (SomeProblem p){
handle(p);
}
do_something_dangerous1();
catch (SomeProblem p){
//catches from only the second unless the first also threw
handle(p);
}
catch (SomeOtherProblem p){
//catches from either, because no other block up there would
handle(p);
}
如果你想避免塊醒目「太多」,你可以做一個新的範圍:
do_something_dangerous2();
{
do_something_dangerous3();
catch (SomeProblem p){
//does not catch from do_something_dangerous2()
//because if that throws, it won't reach in here
handle(p);
}
}
catch (SomeProblem p){
handle(p);
}
catch (SomeOtherProblem p){
handle(p);
}
(我爲什麼這不會對語言,如C工作答案++和Java ,至少在下面發佈爲答案,但我沒有針對動態語言的答案。)
在一般情況下,您需要精確定界異常處理範圍的開始和結束。人們可以爲此使用「孤獨」的範圍,但它不會真正改變任何事情,並且不太清楚。 –
(我曾經在一個使用BEGIN/NIGEB宏定義異常處理範圍的系統上工作,但總體結構幾乎與try/catch/finally完全相同,該函數決定語法,而不是其他方法。) –
我是不是用'如果你想避免一個障礙物'太多'......'呢? – leewz