คำถามติดแท็ก try-catch

try-catch เป็นโครงสร้างทางไวยากรณ์สำหรับการจับข้อยกเว้นที่ยกขึ้นโดยส่วนโค้ด

14
กำลังจับ java.lang.OutOfMemoryError?
เอกสารสำหรับjava.lang.Errorพูดว่า: ข้อผิดพลาดเป็นคลาสย่อยของ Throwable ที่บ่งชี้ถึงปัญหาร้ายแรงที่แอปพลิเคชันที่สมเหตุสมผลไม่ควรพยายามจับ แต่ในฐานะjava.lang.Errorคลาสย่อยjava.lang.Throwableฉันสามารถจับ Throwable ประเภทนี้ได้ ฉันเข้าใจว่าเหตุใดจึงไม่ควรจับข้อยกเว้นแบบนี้ เท่าที่ฉันเข้าใจถ้าเราตัดสินใจที่จะจับมันตัวจัดการจับไม่ควรจัดสรรหน่วยความจำใด ๆ ด้วยตัวเอง มิฉะนั้นOutOfMemoryErrorจะถูกโยนอีกครั้ง ดังนั้นคำถามของฉันคือ: มีสถานการณ์ในโลกแห่งความเป็นจริงเมื่อจับได้java.lang.OutOfMemoryErrorอาจเป็นความคิดที่ดีหรือไม่? หากเราตัดสินใจที่จะจับjava.lang.OutOfMemoryErrorเราจะแน่ใจได้อย่างไรว่าตัวจัดการการจับไม่ได้จัดสรรหน่วยความจำใด ๆ ด้วยตัวเอง (เครื่องมือหรือแนวทางปฏิบัติที่ดีที่สุด)

4
การใช้คำสั่ง python“ with” กับ try-except block
นี่เป็นวิธีที่ถูกต้องในการใช้คำสั่ง python "with" ร่วมกับ try-except block หรือไม่: try: with open("file", "r") as f: line = f.readline() except IOError: <whatever> หากเป็นเช่นนั้นให้พิจารณาวิธีการทำสิ่งต่างๆแบบเก่า: try: f = open("file", "r") line = f.readline() except IOError: <whatever> finally: f.close() ประโยชน์หลักของคำสั่ง "ด้วย" ตรงนี้คือเราสามารถกำจัดโค้ดสามบรรทัดได้หรือไม่? ดูเหมือนว่าจะไม่น่าสนใจสำหรับฉันสำหรับกรณีการใช้งานนี้ (แม้ว่าฉันจะเข้าใจว่าคำสั่ง "ด้วย" มีประโยชน์อื่น ๆ ) แก้ไข: การทำงานของโค้ดสองบล็อกข้างต้นเหมือนกันหรือไม่ แก้ไข 2: คำตอบสองสามข้อแรกมักพูดถึงประโยชน์ของการใช้ "กับ" แต่ดูเหมือนว่าจะมีประโยชน์เพียงเล็กน้อยที่นี่ เราทุกคน …

15
โยนข้อยกเว้นในบล็อกสุดท้าย
มีวิธีที่สวยงามในการจัดการข้อยกเว้นที่เกิดขึ้นในfinallyบล็อกหรือไม่? ตัวอย่างเช่น: try { // Use the resource. } catch( Exception ex ) { // Problem with the resource. } finally { try{ resource.close(); } catch( Exception ex ) { // Could not close the resource? } } คุณจะหลีกเลี่ยงtry/ catchในfinallyบล็อกได้อย่างไร?

10
เหตุใดผลตอบแทนใน "ในที่สุด" จึงแทนที่ "ลอง"
คำสั่งส่งคืนภายในบล็อก try / catch ทำงานอย่างไร function example() { try { return true; } finally { return false; } } ฉันคาดหวังว่าผลลัพธ์ของฟังก์ชันนี้จะเป็นtrueแต่มันกลับเป็นfalse!

3
จะจับ SqlException ที่เกิดจากการหยุดชะงักได้อย่างไร?
จากแอป. NET 3.5 / C # ฉันต้องการตรวจจับSqlExceptionแต่ถ้าเกิดจากการหยุดชะงักในอินสแตนซ์ SQL Server 2008 ข้อความแสดงข้อผิดพลาดทั่วไปคือ Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. แต่ดูเหมือนว่าจะไม่ใช่รหัสข้อผิดพลาดในเอกสารสำหรับข้อยกเว้นนี้ การกรองข้อยกเว้นไม่ให้มีคีย์เวิร์ดdeadlockในข้อความดูเหมือนเป็นวิธีที่น่าเกลียดมากในการบรรลุพฤติกรรมนี้ มีใครรู้วิธีที่ถูกต้องในการทำเช่นนี้หรือไม่?

12
ค่าใช้จ่ายที่แท้จริงของการลอง / จับใน C # คืออะไร?
ดังนั้นฉันรู้ว่า try / catch เพิ่มค่าใช้จ่ายบางส่วนดังนั้นจึงไม่ใช่วิธีที่ดีในการควบคุมโฟลว์กระบวนการ แต่ค่าใช้จ่ายนี้มาจากไหนและผลกระทบที่แท้จริงคืออะไร

11
ความแตกต่างระหว่างลองในที่สุดและลองจับ
อะไรคือความแตกต่างระหว่าง try { fooBar(); } finally { barFoo(); } และ try { fooBar(); } catch(Throwable throwable) { barFoo(throwable); // Does something with throwable, logs it, or handles it. } ฉันชอบเวอร์ชันที่สองมากกว่าเพราะมันทำให้ฉันสามารถเข้าถึง Throwable ได้ มีความแตกต่างทางตรรกะหรือรูปแบบที่ต้องการระหว่างสองรูปแบบหรือไม่? นอกจากนี้ยังมีวิธีเข้าถึงข้อยกเว้นจากประโยคสุดท้ายหรือไม่?

3
การจับข้อยกเว้นหลายข้อใน Java-8
ในขณะที่ลองใช้คุณสมบัติมัลติแคปฉันพบว่าm1()วิธีการของฉันทุกอย่างทำงานได้ดีอย่างที่คาดไว้ อย่างไรก็ตามในm2()รหัสเดียวกันไม่ได้รวบรวม ฉันเพิ่งเปลี่ยนไวยากรณ์เพื่อลดจำนวนบรรทัดของรหัส public class Main { public int m1(boolean bool) { try { if (bool) { throw new Excep1(); } throw new Excep2(); //This m1() is compiling abs fine. } catch (Excep1 | Excep2 e) { return 0; } } public int m2(boolean b) { try { throw b …


2
แยกแยะระหว่างข้อยกเว้นและความล้มเหลวในบล็อกจับ [RAKU]
เรารู้ว่าสามารถจัดการความล้มเหลวได้โดยบล็อกการจับ ในตัวอย่างต่อไปนี้เราสร้างความล้มเหลว 'AdHoc' (ใน other-sub) และเราจัดการข้อยกเว้นในบล็อก CATCH (ใน my-sub) sub my-sub { try { CATCH { when X::AdHoc { say 'AdHoc Exception handled here'; .resume } default {say 'Other Exception'; .resume} } my $b = other-sub(); $b.so ?? $b.say !! 'This was a Failure'.say; } } sub other-sub { fail …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.