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

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


21
ควรลอง ... จับไปข้างในหรือนอกวง?
ฉันมีห่วงที่มีลักษณะเช่นนี้: for (int i = 0; i < max; i++) { String myString = ...; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } นี่คือเนื้อหาหลักของวิธีการที่มีจุดประสงค์เพียงอย่างเดียวคือการส่งคืนแถวลอย ฉันต้องการให้วิธีนี้คืนnullหากมีข้อผิดพลาดดังนั้นฉันจึงใส่วนเข้าไปในtry...catchบล็อกเช่นนี้ try { for (int i = 0; i < max; i++) { String myString = ...; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } } …

6
ไม่พบข้อยกเว้น Java?
ฉันมีปัญหาทางทฤษฎีเล็กน้อยกับการสร้างแบบลองจับ ฉันสอบภาคปฏิบัติเมื่อวานนี้เกี่ยวกับ Java และฉันไม่เข้าใจตัวอย่างต่อไปนี้: try { try { System.out.print("A"); throw new Exception("1"); } catch (Exception e) { System.out.print("B"); throw new Exception("2"); } finally { System.out.print("C"); throw new Exception("3"); } } catch (Exception e) { System.out.print(e.getMessage()); } คำถามคือ "ผลลัพธ์จะเป็นอย่างไร" ฉันค่อนข้างแน่ใจว่ามันจะเป็น AB2C3 แต่น่าแปลกใจ แต่ก็ไม่เป็นความจริง คำตอบที่ถูกต้องคือ ABC3 (ทดสอบแล้วและเป็นแบบนั้นจริงๆ) คำถามของฉันคือข้อยกเว้น ("2") หายไปไหน

8
ฉันจะป้องกัน node.js ไม่ให้ทำงานล้มเหลวได้อย่างไร ลองจับไม่ทำงาน
จากประสบการณ์ของฉันเซิร์ฟเวอร์ php จะโยนข้อยกเว้นไปยังบันทึกหรือไปยังจุดสิ้นสุดเซิร์ฟเวอร์ แต่ node.js เพียงแค่เกิดปัญหา การล้อมโค้ดของฉันด้วย try-catch นั้นไม่ทำงานเนื่องจากทุกอย่างทำแบบอะซิงโครนัส ฉันต้องการที่จะรู้ว่าสิ่งที่คนอื่นทำในเซิร์ฟเวอร์การผลิตของพวกเขา

8
ดีกว่าที่จะ 'ลอง' บางอย่างและตรวจจับข้อยกเว้นหรือทดสอบว่าเป็นไปได้ก่อนเพื่อหลีกเลี่ยงข้อยกเว้นหรือไม่?
ฉันควรทดสอบifสิ่งที่ถูกต้องหรือเพียงtryเพื่อทำและตรวจจับข้อยกเว้น? มีเอกสารประกอบที่ระบุว่าควรใช้วิธีเดียวหรือไม่? pythonicทางเดียวมากกว่าหรือไม่? ตัวอย่างเช่นฉันควร: if len(my_list) >= 4: x = my_list[3] else: x = 'NO_ABC' หรือ: try: x = my_list[3] except IndexError: x = 'NO_ABC' ความคิดบางอย่าง ... PEP 20พูดว่า: ข้อผิดพลาดไม่ควรผ่านไปอย่างเงียบ ๆ เว้นแต่จะปิดเสียงไว้อย่างชัดเจน ควรใช้ a tryแทนการifตีความว่าเป็นข้อผิดพลาดที่ผ่านไปอย่างเงียบ ๆ หรือไม่? และถ้าเป็นเช่นนั้นคุณจะปิดเสียงโดยใช้วิธีนี้อย่างชัดเจนหรือไม่ ฉันไม่ได้หมายถึงสถานการณ์ที่คุณสามารถทำได้เพียง 1 ทางเท่านั้น ตัวอย่างเช่น: try: import foo except ImportError: import baz


6
วิธีจับไม่มีไฟล์สำหรับ fs.readFileSync ()
ภายใน node.js readFile ()แสดงวิธีการจับข้อผิดพลาดอย่างไรก็ตามไม่มีข้อคิดเห็นสำหรับฟังก์ชัน readFileSync ()เกี่ยวกับการจัดการข้อผิดพลาด เช่นถ้าฉันพยายามที่จะใช้ readFileSync () Error: ENOENT, no such file or directoryเมื่อไม่มีแฟ้มที่ฉันได้รับข้อผิดพลาด ฉันจะจับข้อยกเว้นที่ถูกโยนได้อย่างไร? doco ไม่ได้ระบุว่ามีข้อยกเว้นใดบ้างที่ถูกโยนดังนั้นฉันจึงไม่รู้ว่าฉันต้องจับข้อยกเว้นอะไรบ้าง ฉันควรทราบว่าฉันไม่ชอบรูปแบบคำสั่ง try / catch แบบ 'จับทุกข้อยกเว้นที่เป็นไปได้' ทั่วไป ในกรณีนี้ฉันต้องการตรวจจับข้อยกเว้นเฉพาะที่เกิดขึ้นเมื่อไม่มีไฟล์และฉันพยายามดำเนินการ readFileSync โปรดทราบว่าฉันกำลังใช้งานฟังก์ชั่นซิงค์เมื่อเริ่มต้นเท่านั้นก่อนที่จะให้บริการพยายามเชื่อมต่อดังนั้นจึงไม่จำเป็นต้องแสดงความคิดเห็นว่าฉันไม่ควรใช้ฟังก์ชันการซิงค์ :-)

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

1
powershell 2.0 ลองจับวิธีการเข้าถึงข้อยกเว้น
นี่คือtry catchใน PowerShell 2.0 $urls = "http://www.google.com", "http://none.greenjump.nl", "http://www.nu.nl" $wc = New-Object System.Net.WebClient foreach($url in $urls) { try { $url $result=$wc.DownloadString($url) } catch [System.Net.WebException] { [void]$fails.Add("url webfailed $url") } } แต่สิ่งที่ฉันต้องการทำคือสิ่งที่เหมือนใน c # catch( WebException ex) { Log(ex.ToString()); } เป็นไปได้หรือไม่

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

9
C # จับข้อยกเว้นสแตกล้น
ฉันมีการเรียกแบบเรียกซ้ำไปยังเมธอดที่ทำให้เกิดข้อยกเว้นสแต็กโอเวอร์โฟลว์ การโทรครั้งแรกล้อมรอบด้วยบล็อก try catch แต่ไม่พบข้อยกเว้น ข้อยกเว้นของสแตกล้นทำงานในลักษณะพิเศษหรือไม่? ฉันสามารถจับ / จัดการข้อยกเว้นได้อย่างเหมาะสมหรือไม่? ไม่แน่ใจว่าเกี่ยวข้องหรือไม่ แต่ข้อมูลเพิ่มเติม: ไม่มีข้อยกเว้นในเธรดหลัก วัตถุที่รหัสกำลังส่งข้อยกเว้นจะถูกโหลดด้วยตนเองโดย Assembly.LoadFrom (... ) CreateInstance (... )

11
ลองใช้ JavaScript {} without catch {} ได้ไหม
ฉันมีฟังก์ชั่นหลายอย่างที่ส่งคืนบางอย่างหรือส่งข้อผิดพลาด ในฟังก์ชันหลักฉันเรียกสิ่งเหล่านี้และต้องการส่งคืนค่าที่ส่งคืนโดยแต่ละฟังก์ชันหรือไปที่ฟังก์ชันที่สองหากฟังก์ชันแรกเกิดข้อผิดพลาด โดยพื้นฐานแล้วสิ่งที่ฉันมีอยู่คือ: function testAll() { try { return func1(); } catch(e) {} try { return func2(); } catch(e) {} // If func1 throws error, try func2 try { return func3(); } catch(e) {} // If func2 throws error, try func3 } แต่จริงๆแล้วฉันต้องการtryส่งคืนเท่านั้น(เช่นถ้ามันไม่เกิดข้อผิดพลาด) ฉันไม่ต้องการcatchบล็อก อย่างไรก็ตามรหัสเช่นtry {}ล้มเหลวเนื่องจากไม่มีcatch {}บล็อก(ไม่ได้ใช้) ฉันใส่ตัวอย่างใน jsFiddle ดังนั้นมีวิธีใดบ้างที่จะcatchลบบล็อกเหล่านั้นออกไปในขณะที่ได้ผลเช่นเดียวกัน?

16
รูปแบบเพื่อหลีกเลี่ยงการลองจับบล็อกซ้อนกัน?
พิจารณาสถานการณ์ที่ฉันมีสามวิธี (หรือมากกว่า) ในการคำนวณซึ่งแต่ละวิธีอาจล้มเหลวโดยมีข้อยกเว้น ในการพยายามคำนวณแต่ละครั้งจนกว่าเราจะพบสิ่งที่สำเร็จฉันได้ดำเนินการดังต่อไปนี้: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } มีรูปแบบใดบ้างที่ได้รับการยอมรับซึ่งประสบความสำเร็จในวิธีที่ดีกว่านี้? แน่นอนว่าฉันสามารถสรุปการคำนวณแต่ละรายการด้วยวิธีตัวช่วยซึ่งส่งคืนค่าว่างเมื่อเกิดความล้มเหลวจากนั้นใช้ตัว??ดำเนินการ แต่มีวิธีการทำเช่นนี้โดยทั่วไปหรือไม่ (กล่าวคือโดยไม่ต้องเขียนวิธีการช่วยเหลือสำหรับแต่ละวิธีที่ฉันต้องการใช้ )? ฉันคิดเกี่ยวกับการเขียนวิธีการคงที่โดยใช้ชื่อสามัญซึ่งรวมวิธีการใด ๆ ในการลอง …

7
ข้อยกเว้นทำงานอย่างไร (เบื้องหลัง) ใน c ++
ฉันมักจะเห็นคนพูดว่าข้อยกเว้นนั้นช้า แต่ฉันไม่เคยเห็นข้อพิสูจน์ใด ๆ ดังนั้นแทนที่จะถามว่าพวกเขาเป็นอย่างไรฉันจะถามว่าข้อยกเว้นทำงานอย่างไรในเบื้องหลังดังนั้นฉันจึงสามารถตัดสินใจได้ว่าจะใช้เมื่อใดและจะช้าหรือไม่ จากสิ่งที่ฉันรู้ข้อยกเว้นจะเหมือนกับการส่งคืนหลายครั้งยกเว้นว่าจะตรวจสอบหลังจากการส่งคืนแต่ละครั้งว่าจำเป็นต้องทำอย่างอื่นหรือหยุด จะตรวจสอบได้อย่างไรว่าจะหยุดกลับเมื่อใด ฉันเดาว่ามีกองที่สองที่เก็บประเภทของข้อยกเว้นและตำแหน่งสแต็กจากนั้นจะส่งคืนจนกว่าจะถึงที่นั่น ฉันคาดเดาด้วยว่าครั้งเดียวที่สัมผัสกองที่สองนี้คือการโยนและในการลอง / จับแต่ละครั้ง AFAICT การใช้ลักษณะการทำงานที่คล้ายกันกับรหัสส่งคืนจะใช้เวลาเท่ากัน แต่ทั้งหมดนี้เป็นเพียงการคาดเดาดังนั้นฉันจึงอยากรู้ว่าเกิดอะไรขึ้น ข้อยกเว้นทำงานอย่างไร

7
จับคีย์บอร์ดขัดจังหวะใน Python โดยไม่ต้องพยายามยกเว้น
มีวิธีใดบ้างใน Python ในการจับภาพKeyboardInterruptเหตุการณ์โดยไม่ต้องใส่รหัสทั้งหมดในคำสั่งtry-except ฉันต้องการที่จะออกจากหมดจดไร้ร่องรอยถ้าผู้ใช้กด+CtrlC

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.