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

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

5
จับหลายข้อยกเว้นในหนึ่งบรรทัด (ยกเว้นบล็อก)
ฉันรู้ว่าฉันสามารถทำได้: try: # do something that may fail except: # do this if ANYTHING goes wrong ฉันยังสามารถทำสิ่งนี้: try: # do something that may fail except IDontLikeYouException: # say please except YouAreTooShortException: # stand on a ladder แต่ถ้าฉันต้องการทำสิ่งเดียวกันภายในข้อยกเว้นที่แตกต่างกันสองข้อที่ดีที่สุดที่ฉันสามารถนึกได้ในตอนนี้คือการทำสิ่งนี้: try: # do something that may fail except IDontLikeYouException: # say please except …

28
จับข้อยกเว้นหลายรายการพร้อมกันหรือไม่
System.Exceptionมันเป็นกำลังใจที่จะเพียงแค่จับ ควรจับเฉพาะข้อยกเว้น "รู้จัก" เท่านั้น ตอนนี้บางครั้งสิ่งนี้นำไปสู่รหัสซ้ำซ้อนที่ไม่จำเป็นเช่น: try { WebId = new Guid(queryString["web"]); } catch (FormatException) { WebId = Guid.Empty; } catch (OverflowException) { WebId = Guid.Empty; } ฉันสงสัยว่า: มีวิธีจับทั้งข้อยกเว้นและโทรWebId = Guid.Emptyออกครั้งเดียวเท่านั้นหรือไม่ GUIDตัวอย่างที่ได้รับค่อนข้างง่ายในขณะที่มันเป็นเพียง แต่คิดรหัสที่คุณปรับเปลี่ยนวัตถุหลายครั้งและถ้าหนึ่งในกิจวัตรล้มเหลวในทางที่คาดว่าคุณต้องการที่จะ object"รีเซ็ตที่" อย่างไรก็ตามหากมีข้อยกเว้นที่ไม่คาดคิดฉันยังคงต้องการที่จะโยนที่สูงขึ้น


13
จะพิมพ์การติดตามย้อนกลับแบบเต็มโดยไม่หยุดโปรแกรมได้อย่างไร
ฉันกำลังเขียนโปรแกรมที่แยกวิเคราะห์ 10 เว็บไซต์หาไฟล์ข้อมูลบันทึกไฟล์แล้วแยกวิเคราะห์เพื่อสร้างข้อมูลที่สามารถใช้งานได้ง่ายในไลบรารี NumPy มีตันของข้อผิดพลาดนี้เผชิญหน้าไฟล์ผ่านการเชื่อมโยงที่ไม่ดีที่เกิดขึ้นได้ไม่ดี XML รายการหายไปและสิ่งอื่น ๆ ฉันยังจะจัดหมวดหมู่ ฉันเริ่มทำโปรแกรมนี้เพื่อจัดการข้อผิดพลาดเช่นนี้: try: do_stuff() except: pass แต่ตอนนี้ฉันต้องการบันทึกข้อผิดพลาด: try: do_stuff() except Exception, err: print Exception, err หมายเหตุนี่คือการพิมพ์ไปยังไฟล์บันทึกสำหรับการตรวจสอบในภายหลัง ซึ่งมักจะพิมพ์ข้อมูลที่ไร้ประโยชน์มาก สิ่งที่ฉันต้องการคือการพิมพ์บรรทัดเดียวกันแน่นอนที่พิมพ์เมื่อข้อผิดพลาดทริกเกอร์โดยไม่ต้องลองยกเว้นการสกัดกั้นข้อยกเว้น แต่ฉันไม่ต้องการที่จะหยุดโปรแกรมของฉันเพราะมันซ้อนอยู่ในชุดของลูปที่ฉันต้องการ ดูให้เสร็จ


10
การจัดการข้อยกเว้นที่ดีที่สุดสำหรับ Node.js
ฉันเพิ่งเริ่มลอง node.js ไม่กี่วันที่ผ่านมา ฉันรู้ว่าโหนดถูกยกเลิกเมื่อใดก็ตามที่ฉันมีข้อยกเว้นที่ไม่สามารถจัดการได้ในโปรแกรมของฉัน สิ่งนี้แตกต่างจากคอนเทนเนอร์เซิร์ฟเวอร์ปกติที่ฉันเคยเห็นที่ Worker Thread เท่านั้นที่ตายเมื่อเกิดข้อยกเว้นที่ไม่สามารถจัดการได้และคอนเทนเนอร์จะยังคงสามารถรับคำขอได้ นี่ทำให้เกิดคำถามสองสามข้อ: เป็นprocess.on('uncaughtException')วิธีเดียวที่มีประสิทธิภาพในการป้องกันหรือไม่ จะprocess.on('uncaughtException')จับข้อยกเว้นที่ไม่สามารถจัดการได้ในระหว่างการดำเนินการของกระบวนการอะซิงโครนัสด้วยหรือไม่ มีโมดูลที่สร้างขึ้นแล้ว (เช่นส่งอีเมลหรือเขียนไปยังไฟล์) ที่ฉันสามารถใช้ประโยชน์ในกรณีที่มีข้อยกเว้นที่ไม่ได้ตรวจสอบหรือไม่ ฉันขอขอบคุณตัวชี้ / บทความใด ๆ ที่จะแสดงแนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อยกเว้นที่ไม่ได้ตรวจสอบใน node.js


17
ChuckNorrisException ที่จับไม่ได้
เป็นไปได้ไหมที่จะสร้างส่วนของโค้ดในJavaที่จะทำให้ไม่สามารถจับสมมุติฐานได้java.lang.ChuckNorrisException? ความคิดที่อยู่ในใจคือการใช้ตัวอย่างเช่นตัวดักหรือการเขียนโปรแกรมเชิงกว้าง


17
เหตุใดจึงต้องจับและสร้างข้อยกเว้นขึ้นใหม่ใน C #
ฉันกำลังดูบทความC # - วัตถุการถ่ายโอนข้อมูลบน DTO ที่ต่อเนื่องกันได้ บทความประกอบด้วยรหัสชิ้นนี้: public static string SerializeDTO(DTO dto) { try { XmlSerializer xmlSer = new XmlSerializer(dto.GetType()); StringWriter sWriter = new StringWriter(); xmlSer.Serialize(sWriter, dto); return sWriter.ToString(); } catch(Exception ex) { throw ex; } } ส่วนที่เหลือของบทความดูมีเหตุผลและสมเหตุสมผล (สำหรับ noob) แต่การลองจับการขว้างเป็น WtfException ... นี่มันไม่เทียบเท่ากับการจัดการกับข้อยกเว้นหรือเปล่า? Ergo: public static string SerializeDTO(DTO dto) …

7
เริ่มต้นช่วยเหลือและมั่นใจใน Ruby?
ฉันเพิ่งเริ่มเขียนโปรแกรมใน Ruby และฉันกำลังดูการจัดการข้อยกเว้น ฉันสงสัยว่าensureทับทิมนั้นเทียบเท่ากับfinallyใน C # หรือไม่ ฉันควรจะมี: file = File.open("myFile.txt", "w") begin file << "#{content} \n" rescue #handle the error here ensure file.close unless file.nil? end หรือฉันควรทำเช่นนี้? #store the file file = File.open("myFile.txt", "w") begin file << "#{content} \n" file.close rescue #handle the error here ensure file.close unless file.nil? …

8
เมื่อใดที่ฉันควรใช้ noexcept จริงๆ
noexceptคำหลักที่สามารถนำมาประยุกต์ใช้ให้เหมาะสมกับลายเซ็นฟังก์ชั่นจำนวนมาก แต่ผมไม่แน่ใจว่าเมื่อฉันควรพิจารณาใช้มันในทางปฏิบัติ จากสิ่งที่ฉันได้อ่านจนถึงตอนนี้noexceptดูเหมือนว่าประเด็นสำคัญบางอย่างที่เกิดขึ้นเมื่อมีการเคลื่อนย้ายสิ่งก่อสร้าง อย่างไรก็ตามฉันยังคงไม่สามารถให้คำตอบที่น่าพอใจสำหรับคำถามเชิงปฏิบัติบางอย่างที่ทำให้ฉันอ่านเพิ่มเติมเกี่ยวกับnoexceptในตอนแรก มีตัวอย่างมากมายของฟังก์ชั่นที่ฉันรู้ว่าจะไม่ทิ้ง แต่สำหรับคอมไพเลอร์ไม่สามารถกำหนดได้ด้วยตัวเอง ฉันควรผนวกท้ายnoexceptประกาศฟังก์ชันในทุกกรณีเช่นนี้หรือไม่? ต้องคิดก่อนว่าจะต้องต่อท้ายหรือไม่noexceptหลังจากการประกาศฟังก์ชั่นทุกครั้งจะลดประสิทธิภาพการทำงานของโปรแกรมเมอร์ลงอย่างมาก (และตรงไปตรงมาจะเป็นความเจ็บปวดในตูด) สำหรับสถานการณ์ที่ฉันควรจะระมัดระวังมากขึ้นเกี่ยวกับการใช้noexceptและสำหรับสถานการณ์ที่ฉันจะได้รับไปด้วยนัยnoexcept(false)? ฉันสามารถเมื่อแนบเนียนคาดหวังที่จะสังเกตการปรับปรุงประสิทธิภาพการทำงานหลังจากที่ใช้noexcept? โดยเฉพาะอย่างยิ่งให้ตัวอย่างของรหัสที่คอมไพเลอร์ C ++ noexceptสามารถสร้างรหัสเครื่องดีขึ้นหลังจากที่นอกเหนือจากคะแนน โดยส่วนตัวแล้วฉันสนใจnoexceptเพราะมีอิสระมากขึ้นในการรวบรวมเพื่อใช้การเพิ่มประสิทธิภาพบางประเภทอย่างปลอดภัย คอมไพเลอร์สมัยใหม่ใช้ประโยชน์จากnoexceptวิธีนี้หรือไม่? ถ้าไม่ฉันสามารถคาดหวังให้พวกเขาบางคนทำเช่นนั้นได้ในอนาคตอันใกล้

11
ฉันจะบันทึกข้อผิดพลาด Python ด้วยข้อมูลการดีบักได้อย่างไร
ฉันกำลังพิมพ์ข้อความข้อยกเว้น Python ไปยังไฟล์บันทึกด้วยlogging.error: import logging try: 1/0 except ZeroDivisionError as e: logging.error(e) # ERROR:root:division by zero เป็นไปได้หรือไม่ที่จะพิมพ์ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับข้อยกเว้นและรหัสที่สร้างมันขึ้นมานอกเหนือจากสตริงข้อยกเว้น? สิ่งต่างๆเช่นหมายเลขบรรทัดหรือร่องรอยสแต็กจะดีมาก


10
เป็นวิธีปฏิบัติที่ดีในการใช้ try-exception-else ใน Python หรือไม่?
ฉันเห็นบล็อกเป็นครั้งคราวใน Python try: try_this(whatever) except SomeException as exception: #Handle exception else: return something อะไรคือเหตุผลที่ทำให้การลองยกเว้นอื่นมีอยู่ ฉันไม่ชอบการเขียนโปรแกรมแบบนั้นเนื่องจากใช้ข้อยกเว้นในการควบคุมการไหล อย่างไรก็ตามหากมันรวมอยู่ในภาษานั้นจะต้องมีเหตุผลที่ดีสำหรับมันใช่ไหม? มันเป็นความเข้าใจของฉันว่าข้อยกเว้นไม่ใช่ข้อผิดพลาดและควรใช้สำหรับเงื่อนไขพิเศษเท่านั้น (เช่นฉันพยายามเขียนไฟล์ลงในดิสก์และไม่มีที่ว่างเพิ่มเติมหรือบางทีฉันไม่ได้รับอนุญาต) และไม่ใช่การไหล ควบคุม. ปกติฉันจัดการข้อยกเว้นเป็น: something = some_default_value try: something = try_this(whatever) except SomeException as exception: #Handle exception finally: return something หรือถ้าฉันไม่ต้องการคืนสิ่งใดจริงๆหากมีข้อยกเว้นเกิดขึ้น: try: something = try_this(whatever) return something except SomeException as exception: #Handle exception

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