คำถามติดแท็ก exception-handling

ข้อยกเว้นเป็นเงื่อนไขผิดปกติที่ต้องมีการเบี่ยงเบนจากการไหลปกติของโปรแกรม โดยปกติข้อยกเว้นไม่ควรส่งผลให้เกิดความล้มเหลวทั้งหมด แต่จะเข้าร่วมโดยตัวจัดการข้อยกเว้น การจัดการข้อยกเว้นเป็นโครงสร้างที่มีอยู่แล้วในหลายภาษาโปรแกรม โดยปกติแล้วข้อยกเว้นจะถูกจัดการโดยการคลายสแต็กดังนั้นจึงย้อนกลับไปยังสถานะที่กำหนดนอกขอบเขตของข้อยกเว้นจากนั้นจึงเรียกใช้ตัวจัดการบล็อกหรือรูทีน

10
มีความแตกต่างระหว่าง "โยน" และ "โยนอดีต" หรือไม่?
มีบางโพสต์ที่ถามว่าความแตกต่างระหว่างสองโพสต์นั้นมีอะไรบ้าง (ทำไมฉันต้องพูดถึงเรื่องนี้ด้วย ... ) แต่คำถามของฉันแตกต่างกันในวิธีที่ฉันเรียกว่า "throw ex" ในวิธีการจัดการข้อผิดพลาดเหมือนพระเจ้า public class Program { public static void Main(string[] args) { try { // something } catch (Exception ex) { HandleException(ex); } } private static void HandleException(Exception ex) { if (ex is ThreadAbortException) { // ignore then, return; } if (ex is ArgumentOutOfRangeException) …

11
รับคำอธิบายข้อยกเว้นและการติดตามสแต็กซึ่งทำให้เกิดข้อยกเว้นทั้งหมดเป็นสตริง
ฉันเห็นโพสต์มากมายเกี่ยวกับการติดตามสแต็กและข้อยกเว้นใน Python แต่ไม่พบสิ่งที่ฉันต้องการ ฉันมีรหัส Python 2.7 จำนวนหนึ่งซึ่งอาจทำให้เกิดข้อยกเว้น ฉันต้องการที่จะจับมันและกำหนดให้กับสตริงคำอธิบายแบบเต็มและการติดตามสแต็กที่ทำให้เกิดข้อผิดพลาด (เพียงแค่ทั้งหมดที่เราใช้เพื่อดูบนคอนโซล) ฉันต้องการสตริงนี้เพื่อพิมพ์ไปยังกล่องข้อความใน GUI บางสิ่งเช่นนี้ try: method_that_can_raise_an_exception(params) except Exception as e: print_to_textbox(complete_exception_description(e)) ปัญหาคือฟังก์ชั่นcomplete_exception_descriptionคืออะไร?


19
รับสตริงการเชื่อมต่อจาก App.config
var connection = ConnectionFactory.GetConnection( ConfigurationManager.ConnectionStrings["Test"] .ConnectionString, DataBaseProvider); และนี่คือ App.config ของฉัน: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration> แต่เมื่อโครงการของฉันทำงานนี่คือข้อผิดพลาดของฉัน: การอ้างอิงวัตถุไม่ได้ถูกตั้งค่าเป็นอินสแตนซ์ของวัตถุ

8
อะไรคือข้อแตกต่างระหว่าง“ โยนข้อผิดพลาดใหม่” และ“ โยนข้อผิดพลาดบางอย่าง”
ฉันต้องการที่จะเขียนตัวจัดการข้อผิดพลาดทั่วไปซึ่งจะจับข้อผิดพลาดที่กำหนดเองที่เกิดขึ้นกับจุดประสงค์ที่โค้ดใด ๆ เมื่อฉันไม่throw new Error('sample')ชอบในรหัสต่อไปนี้ try { throw new Error({'hehe':'haha'}); // throw new Error('hehe'); } catch(e) { alert(e); console.log(e); } เข้าสู่ระบบแสดงใน Firefox เป็นError: [object Object]และฉันไม่สามารถแยกวัตถุ สำหรับบันทึกที่สองthrowแสดงเป็น:Error: hehe ในขณะที่ฉันทำ try { throw ({'hehe':'haha'}); } catch(e) { alert(e); console.log(e); } คอนโซลแสดงเป็น: Object { hehe="haha"}ซึ่งฉันสามารถเข้าถึงคุณสมบัติข้อผิดพลาด อะไรคือความแตกต่าง? ความแตกต่างที่เห็นในรหัสคืออะไร? เช่นเดียวกับสตริงจะถูกส่งผ่านเป็นสตริงและวัตถุเป็นวัตถุ แต่ไวยากรณ์จะแตกต่างกันอย่างไร ฉันไม่ได้สำรวจวัตถุข้อผิดพลาดในการขว้างปา ... ฉันทำแค่โยนสาย มีวิธีอื่นนอกเหนือจากสองวิธีที่กล่าวมาข้างต้นหรือไม่?

5
วิธีเขียน trycatch ใน R
ฉันต้องการเขียนtrycatchโค้ดเพื่อจัดการกับข้อผิดพลาดในการดาวน์โหลดจากเว็บ url <- c( "http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html", "http://en.wikipedia.org/wiki/Xz") y <- mapply(readLines, con=url) คำสั่งสองคำสั่งเหล่านี้ทำงานได้สำเร็จ ด้านล่างนี้ฉันสร้างที่อยู่เว็บที่ไม่มีอยู่: url <- c("xxxxx", "http://en.wikipedia.org/wiki/Xz") url[1]ไม่ได้อยู่. เราจะเขียนtrycatchloop (function) อย่างไร: เมื่อ URL ไม่ถูกต้องผลลัพธ์จะเป็น: "เว็บ URL ไม่ถูกต้องไม่สามารถรับได้" เมื่อ URL ผิดรหัสจะไม่หยุด แต่ยังคงดาวน์โหลดต่อไปจนกว่าจะสิ้นสุดรายการ URL หรือไม่

16
ทำไม“ ยกเว้น: ผ่าน” การฝึกเขียนโปรแกรมที่ไม่ดี?
ฉันมักจะเห็นความคิดเห็นเกี่ยวกับคำถาม Stack Overflow อื่น ๆ เกี่ยวกับวิธีการใช้งานที่except: passหมดกำลังใจ ทำไมสิ่งนี้ถึงไม่ดี? บางครั้งฉันก็ไม่สนใจว่าข้อผิดพลาดคืออะไรและฉันต้องการที่จะดำเนินการต่อกับรหัส try: something except: pass เหตุใดการใช้except: passบล็อกที่ไม่ดี อะไรทำให้มันแย่ มันเป็นความจริงที่ว่าฉันpassมีข้อผิดพลาดหรือว่าฉันexceptผิดพลาด?

7
การจัดการ InterruptedException ใน Java
ความแตกต่างระหว่างวิธีการจัดการต่อไปนี้InterruptedExceptionคืออะไร? วิธีที่ดีที่สุดที่จะทำคืออะไร? try{ //... } catch(InterruptedException e) { Thread.currentThread().interrupt(); } หรือ try{ //... } catch(InterruptedException e) { throw new RuntimeException(e); } แก้ไข: ฉันต้องการที่จะรู้ว่าในสถานการณ์เหล่านี้ใช้ทั้งสอง

13
คุณ (จริงๆ) เขียนรหัสที่ปลอดภัยยกเว้น? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา การจัดการข้อยกเว้น (EH) ดูเหมือนจะเป็นมาตรฐานปัจจุบันและด้วยการค้นหาเว็บฉันไม่สามารถค้นหาความคิดแปลกใหม่หรือวิธีการที่พยายามปรับปรุงหรือแทนที่มัน (ดีมีความแตกต่างบางอย่างอยู่ แต่ไม่มีอะไรแปลกใหม่) แม้ว่าคนส่วนใหญ่ดูเหมือนจะเพิกเฉยหรือยอมรับมัน EH มีข้อเสียอย่างใหญ่หลวง: ข้อยกเว้นจะไม่สามารถมองเห็นได้จากโค้ดและสร้างจุดออกที่เป็นไปได้มากมาย โจเอลซอฟแวร์เขียนบทความเกี่ยวกับเรื่องนี้ การเปรียบเทียบgotoกับความสมบูรณ์แบบนั้นทำให้ฉันคิดอีกครั้งเกี่ยวกับ EH ฉันพยายามหลีกเลี่ยง EH และใช้ค่าส่งคืนการโทรกลับหรืออะไรก็ตามที่เหมาะกับวัตถุประสงค์ แต่เมื่อคุณต้องเขียนรหัสที่เชื่อถือได้คุณก็ไม่สามารถเพิกเฉยต่อ EH ได้ในวันนี้ : มันเริ่มต้นด้วยการnew, ซึ่งอาจทำให้เกิดข้อยกเว้นแทนที่จะส่งกลับ 0 (เหมือนในสมัยก่อน) สิ่งนี้ทำให้เกี่ยวกับบรรทัดของรหัส C ++ ใด ๆ ที่เสี่ยงต่อการยกเว้น และสถานที่อื่น ๆ ใน C + + รหัสพื้นฐานโยนข้อยกเว้น ... std lib ทำมันและอื่น ๆ รู้สึกเหมือนกำลังเดินบนพื้นที่สั่นคลอนดังนั้นตอนนี้เราถูกบังคับให้ดูแลเรื่องข้อยกเว้น! …

19
ฉันจะจัดการคำเตือนของฟังก์ชัน file_get_contents () ใน PHP ได้อย่างไร
ฉันเขียนโค้ด PHP เช่นนี้ $site="http://www.google.com"; $content = file_get_content($site); echo $content; แต่เมื่อฉันลบ "http: //" ออกจาก$siteฉันได้รับคำเตือนต่อไปนี้: คำเตือน: file_get_contents (www.google.com) [function.file-get-content]: ไม่สามารถเปิดสตรีม: ฉันลองtryแล้วcatchแต่มันใช้งานไม่ได้

14
ทำไมเราถึงต้องการประโยค“ สุดท้าย” ใน Python?
ผมไม่แน่ใจว่าทำไมเราต้องfinallyอยู่ในtry...except...finallyงบ ในความคิดของฉันบล็อกรหัสนี้ try: run_code1() except TypeError: run_code2() other_code() เหมือนกันกับสิ่งนี้โดยใช้finally: try: run_code1() except TypeError: run_code2() finally: other_code() ฉันพลาดอะไรไปรึเปล่า?

4
การจับข้อยกเว้นในขณะที่ใช้ Python 'กับ' คำสั่ง
เพื่อความอัปยศของฉันฉันไม่สามารถหาวิธีการจัดการข้อยกเว้นสำหรับหลาม 'กับ' คำสั่ง ถ้าฉันมีรหัส: with open("a.txt") as f: print f.readlines() ฉันต้องการจัดการ 'file not found exception' เพื่อที่จะทำบางอย่าง แต่ฉันเขียนไม่ได้ with open("a.txt") as f: print f.readlines() except: print 'oops' และไม่สามารถเขียนได้ with open("a.txt") as f: print f.readlines() else: print 'oops' การล้อมรอบ 'ด้วย' ในคำสั่งลอง / ยกเว้นไม่ทำงาน: ไม่มีการยกข้อยกเว้น ฉันจะทำอย่างไรเพื่อประมวลผลความล้มเหลวภายในคำสั่ง 'with' แบบ Pythonic?

11
แนวทางปฏิบัติที่ดีที่สุดสำหรับการจับและยกเว้นข้อยกเว้น. NET
อะไรคือการปฏิบัติที่ดีที่สุดที่จะต้องพิจารณาเมื่อจับข้อยกเว้นและอีกครั้งโยนพวกเขา? ฉันต้องการตรวจสอบให้แน่ใจว่าExceptionวัตถุInnerExceptionและการติดตามสแต็กถูกเก็บรักษาไว้ มีความแตกต่างระหว่างบล็อครหัสต่อไปนี้ในวิธีที่พวกเขาจัดการกับเรื่องนี้หรือไม่? try { //some code } catch (Exception ex) { throw ex; } Vs: try { //some code } catch { throw; }

6
ตรวจจับข้อยกเว้นที่ถูกโยนโดยวิธีการ void async
การใช้ async CTP จาก Microsoft สำหรับ. NET เป็นไปได้หรือไม่ที่จะรับข้อยกเว้นที่เกิดจากวิธี async ในวิธีการโทร? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ …

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

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