我注意到Exception.pm和Error.pm似乎沒有廣泛用於Perl社區。這是由於異常處理的大尺寸eval
?在Perl中處理異常的最佳方式是什麼?
此外,Perl程序似乎對異常處理有更寬鬆的政策。這是否有一個令人信服的理由?
在任何情況下,Perl中用於異常處理的最佳方法是什麼?
我注意到Exception.pm和Error.pm似乎沒有廣泛用於Perl社區。這是由於異常處理的大尺寸eval
?在Perl中處理異常的最佳方式是什麼?
此外,Perl程序似乎對異常處理有更寬鬆的政策。這是否有一個令人信服的理由?
在任何情況下,Perl中用於異常處理的最佳方法是什麼?
Perl社區的共識似乎是Try::Tiny是做異常處理的首選方式。您提到的「寬鬆政策」可能是由於以下因素的組合:
注意,最後一個項目意味着你會看到很多這樣的代碼:
eval { something() };
if ([email protected]) {
warn "Oh no! [[email protected]]\n";
}
這是異常處理,即使它不使用try/catch語句的語法。儘管如此,它仍然很脆弱,並且會打破一些大多數人都沒有想到的微妙邊緣情況。 Try :: Tiny和CPAN上的其他異常處理模塊是爲了更容易正確使用而編寫的。
1. C確實有setjmp()
和longjmp()
,它可以用於非常粗糙的異常處理形式。
+1「讓它更容易*獲得正確「 – 2010-10-23 22:31:21
只是爲了澄清原始海報可能會或可能不會遭受的一種常見誤解:'eval BLOCK' *不是*'eval STRING',並且不會在運行時編譯代碼。這只是一個異常處理方法 - 嘗試一個有趣的名字和有趣的語義。 – hobbs 2010-10-24 03:12:19
dupe of http://stackoverflow.com/questions/503189/is-object-oriented-exception-handling-in-perl-worth-it http://stackoverflow.com/questions/2165161/whats- broken-about-exceptions-in-perl http://stackoverflow.com/questions/2439966/do-you-use-an-exception-class-in-your-perl-programs-why-or-why-not http://stackoverflow.com/questions/1426501/how-do-i-handle-exceptions-in-a-procedural-language - 我們是否真的需要關於Perl異常處理的另一篇文章? – Ether 2010-10-23 22:19:02
查看我的回答[Is Try :: Tiny仍然推薦用於Perl 5.14或更高版本中的異常處理?](http://stackoverflow.com/a/10374265/2766176) – 2014-12-20 07:19:39