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

30
ในที่สุดบล็อกจะถูกเรียกใช้งานใน Java เสมอหรือไม่
เมื่อพิจารณาถึงรหัสนี้ฉันสามารถมั่นใจได้อย่างแน่นอนว่าfinallyบล็อกจะดำเนินการเสมอไม่ว่าsomething()จะเกิดอะไรขึ้น try { something(); return success; } catch (Exception e) { return failure; } finally { System.out.println("I don't know if this will get printed out"); }

11
จะเกิดอะไรขึ้นหากในที่สุดบล็อกมีข้อผิดพลาดเกิดขึ้น
หากบล็อกสุดท้ายพ่นยกเว้นสิ่งที่ว่าที่เกิดขึ้น? โดยเฉพาะจะเกิดอะไรขึ้นถ้าข้อยกเว้นถูกโยนลงครึ่งหนึ่งผ่านบล็อกสุดท้าย ส่วนที่เหลือของคำสั่ง (หลังจาก) ในบล็อกนี้ถูกเรียก? ฉันรู้ว่าข้อยกเว้นจะแพร่กระจายขึ้นไป

20
ทำไมจึงลอง {... } ในที่สุด {…} ดี ลอง {…} จับ {} ไม่ดีใช่ไหม
ฉันเคยเห็นคนพูดว่ามันเป็นรูปแบบที่ไม่ดีที่จะใช้ catch โดยไม่มีข้อโต้แย้งโดยเฉพาะถ้า catch นั้นไม่ได้ทำอะไร: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); อย่างไรก็ตามนี่ถือว่าเป็นรูปแบบที่ดี: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { …

3
@try - catch block ใน Objective-C
เหตุใด @try block จึงไม่ทำงาน มันทำให้แอปขัดข้อง แต่มันควรจะถูกบล็อก @try NSString* test = [NSString stringWithString:@"ss"]; @try { [test characterAtIndex:6]; } @catch (NSException * e) { NSLog(@"Exception: %@", e); } @finally { NSLog(@"finally"); }

6
กลับมาจากการบล็อกในที่สุดใน Java
ฉันรู้สึกประหลาดใจเมื่อเร็ว ๆ นี้ที่พบว่ามีความเป็นไปได้ที่จะมีข้อความสั่งคืนในบล็อกสุดท้ายใน Java ดูเหมือนว่าผู้คนจำนวนมากคิดว่ามันเป็นเรื่องเลวร้ายที่ต้องทำตามที่อธิบายไว้ใน ' อย่ากลับมาในประโยคสุดท้าย ' เกาอีกเล็กน้อยฉันพบ ' การกลับมาของ Java ไม่เสมอไป ' ซึ่งแสดงตัวอย่างที่น่ากลัวเกี่ยวกับการควบคุมการไหลประเภทอื่น ๆ ในบล็อกในที่สุด ดังนั้นคำถามของฉันคือทุกคนสามารถให้ฉันตัวอย่างที่คำสั่งคืน (หรือการควบคุมการไหลอื่น ๆ ) ในที่สุดบล็อกสร้างรหัสที่อ่านได้ดีขึ้น / มากขึ้น?

6
เป็นการปฏิบัติที่ไม่ดีที่จะกลับมาจากภายใน try catch ในที่สุดหรือไม่?
เช้านี้ฉันเจอโค้ดบางอย่างที่มีลักษณะดังนี้: try { x = SomeThingDangerous(); return x; } catch (Exception ex) { throw new DangerousException(ex); } finally { CleanUpDangerousStuff(); } ตอนนี้รหัสนี้รวบรวมได้ดีและทำงานได้ตามที่ควร แต่ก็ไม่รู้สึกถูกต้องที่จะกลับมาจากภายใน try block โดยเฉพาะอย่างยิ่งหากมีการเชื่อมโยงในที่สุด ปัญหาหลักของฉันคือจะเกิดอะไรขึ้นถ้าในที่สุดก็มีข้อยกเว้นของตัวเอง? คุณมีตัวแปรที่ส่งคืนแล้ว แต่ยังมีข้อยกเว้นในการจัดการด้วย ... ดังนั้นฉันจึงสนใจที่จะรู้ว่าคนอื่นคิดอย่างไรเกี่ยวกับการกลับมาจากในบล็อกลอง?

6
'ในที่สุด' จะดำเนินการใน Python เสมอหรือไม่?
สำหรับการบล็อกการลองสุดท้ายที่เป็นไปได้ใน Python จะรับประกันfinallyได้หรือไม่ว่าบล็อกจะถูกเรียกใช้งานเสมอ ตัวอย่างเช่นสมมติว่าฉันกลับมาขณะอยู่ในexceptบล็อก: try: 1/0 except ZeroDivisionError: return finally: print("Does this code run?") หรือบางทีฉันอาจจะเพิ่มException: try: 1/0 except ZeroDivisionError: raise finally: print("What about this code?") การทดสอบแสดงให้เห็นว่ามีfinallyการดำเนินการสำหรับตัวอย่างข้างต้น แต่ฉันคิดว่ามีสถานการณ์อื่น ๆ ที่ฉันไม่ได้นึกถึง มีสถานการณ์ใดบ้างที่finallyบล็อกไม่สามารถดำเนินการใน Python ได้

11
Java Try Catch สุดท้ายบล็อกโดยไม่จับ
ฉันกำลังตรวจสอบโค้ดใหม่ โปรแกรมมีการทดลองและบล็อกสุดท้ายเท่านั้น เนื่องจากบล็อก catch ถูกแยกออกการ try block จะทำงานอย่างไรหากพบข้อยกเว้นหรือสิ่งใดที่สามารถโยนได้ มันไปที่บล็อกสุดท้ายโดยตรงหรือไม่?

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