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

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

3
จะพิมพ์การติดตามสแต็กแบบเต็มได้อย่างไร?
ตัวอย่างเช่นในที่เดียว ... //---------------a try { // some network call } catch(WebException we) { throw new MyCustomException("some message ....", we); } ... และอีกที่หนึ่ง ... //--------------b try { // invoke code above } catch(MyCustomException we) { Debug.Writeline(we.stacktrace); // <---------------- } stacktrace ที่ฉันพิมพ์มันเริ่มจาก a ถึง b เท่านั้นไม่รวม stacktrace ภายในจาก WebException ฉันจะพิมพ์ stacktrace ทั้งหมดได้อย่างไร …

3
การจับข้อยกเว้นด้วย "จับเมื่อ"
ฉันเจอคุณลักษณะใหม่นี้ใน C # ซึ่งช่วยให้ตัวจัดการการจับสามารถดำเนินการได้เมื่อตรงตามเงื่อนไขที่กำหนด int i = 0; try { throw new ArgumentNullException(nameof(i)); } catch (ArgumentNullException e) when (i == 1) { Console.WriteLine("Caught Argument Null Exception"); } ฉันพยายามทำความเข้าใจว่าสิ่งนี้อาจเป็นประโยชน์เมื่อใด สถานการณ์หนึ่งอาจเป็นดังนี้: try { DatabaseUpdate() } catch (SQLException e) when (driver == "MySQL") { //MySQL specific error handling and wrapping up the exception …

14
ฉันควรสืบทอดจาก std :: ข้อยกเว้นหรือไม่
ผมเคยเห็นแหล่งที่เชื่อถือได้อย่างน้อยหนึ่ง (คลาส c ++ ผมเอา) ขอแนะนำให้ใช้เฉพาะการเรียนการยกเว้นใน C ++ std::exceptionควรสืบทอดจาก ฉันไม่ชัดเจนเกี่ยวกับประโยชน์ของแนวทางนี้ ใน C # เหตุผลในการสืบทอดApplicationExceptionนั้นชัดเจน: คุณจะได้รับวิธีการคุณสมบัติและตัวสร้างที่เป็นประโยชน์จำนวนหนึ่งและต้องเพิ่มหรือแทนที่สิ่งที่คุณต้องการ ด้วยstd::exceptionมันก็ดูเหมือนว่าสิ่งที่คุณได้รับคือwhat()วิธีการที่จะแทนที่ซึ่งคุณสามารถเช่นเดียวกับดีสร้างขึ้นเอง ดังนั้นประโยชน์ของการใช้std::exceptionเป็นคลาสพื้นฐานสำหรับคลาสข้อยกเว้นเฉพาะแอปพลิเคชันของฉันคืออะไร? มีเหตุผลที่ดีที่จะไม่สืบทอดstd::exceptionหรือไม่?

4
“ do something OR DIE ()” ทำงานอย่างไรใน PHP?
ฉันกำลังเขียนแอพ php เพื่อเข้าถึงฐานข้อมูล MySQL และในบทช่วยสอนมันบอกบางอย่างในแบบฟอร์ม mysql_connect($host, $user, $pass) or die("could not connect"); PHP รู้ได้อย่างไรว่าฟังก์ชั่นล้มเหลวเพื่อให้เรียกใช้ส่วนแม่พิมพ์ ฉันเดาว่าฉันกำลังถามว่าส่วน "หรือ" ทำงานอย่างไร ไม่คิดว่าจะเคยเห็นมาก่อน

10
การใช้ printStackTrace () method ใน Java คืออะไร?
ฉันกำลังผ่านโปรแกรมซ็อกเก็ต ในนั้นprintStackTraceเรียกว่าIOExceptionวัตถุในบล็อกจับ ทำอะไรได้printStackTrace()จริง? catch(IOException ioe) { ioe.printStackTrace(); } ฉันไม่รู้จุดประสงค์ของมัน ใช้ทำอะไร?

5
การจัดการข้อยกเว้นใน R [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ ใครมีตัวอย่าง / บทช่วยสอนเกี่ยวกับการจัดการข้อยกเว้นใน R? เอกสารอย่างเป็นทางการค่อนข้างสั้นมาก

4
วิธีรับข้อความยกเว้นใน Python อย่างถูกต้อง
วิธีใดเป็นวิธีที่ดีที่สุดในการรับข้อความยกเว้นจากส่วนประกอบของไลบรารีมาตรฐานใน Python ฉันสังเกตเห็นว่าในบางกรณีคุณสามารถรับได้จากmessageฟิลด์เช่นนี้: try: pass except Exception as ex: print(ex.message) แต่ในบางกรณี (ตัวอย่างเช่นในกรณีของข้อผิดพลาดของซ็อกเก็ต) คุณต้องทำสิ่งนี้: try: pass except socket.error as ex: print(ex) ฉันสงสัยว่ามีวิธีมาตรฐานใดบ้างที่จะครอบคลุมสถานการณ์เหล่านี้ส่วนใหญ่

7
ฉันจะหาข้อยกเว้นใน C ++ ได้อย่างไร
ฉันมีโปรแกรมที่แสดงข้อยกเว้นที่ไม่ถูกจับได้ที่ไหนสักแห่ง สิ่งที่ฉันได้รับคือรายงานว่ามีการโยนข้อยกเว้นและไม่มีข้อมูลว่ามีการโยนทิ้งไปที่ใด ดูเหมือนว่าไม่มีเหตุผลสำหรับโปรแกรมที่คอมไพล์มีสัญลักษณ์การดีบักที่จะไม่แจ้งให้ฉันทราบว่ามีการสร้างข้อยกเว้นในโค้ดของฉันที่ใด มีวิธีใดบ้างที่จะบอกได้ว่าข้อยกเว้นของฉันมาจากการไม่ตั้งค่า 'catch throw' ใน gdb และเรียก backtrace สำหรับข้อยกเว้นการโยนทุกครั้ง

4
คลาสข้อผิดพลาดที่กำหนดเองของ Ruby: การสืบทอดแอตทริบิวต์ข้อความ
ดูเหมือนจะหาข้อมูลเกี่ยวกับคลาสข้อยกเว้นแบบกำหนดเองไม่ได้มากนัก สิ่งที่ฉันรู้ คุณสามารถประกาศคลาสข้อผิดพลาดที่กำหนดเองและปล่อยให้สืบทอดจากStandardErrorดังนั้นจึงเป็นrescued: class MyCustomError < StandardError end สิ่งนี้ช่วยให้คุณสามารถเพิ่มได้โดยใช้: raise MyCustomError, "A message" และรับข้อความนั้นในภายหลังเมื่อช่วยชีวิต rescue MyCustomError => e puts e.message # => "A message" อะไรไม่รู้ ฉันต้องการยกเว้นฟิลด์ที่กำหนดเองของฉัน แต่ฉันต้องการสืบทอดmessageแอตทริบิวต์จากคลาสแม่ ผมพบว่าการอ่านในหัวข้อนี้ที่@messageไม่ได้เป็นตัวแปรเช่นการเรียนการยกเว้นดังนั้นฉันกังวลว่ามรดกของฉันจะไม่ทำงาน ใครสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ได้หรือไม่? ฉันจะใช้คลาสข้อผิดพลาดที่กำหนดเองกับobjectแอตทริบิวต์ได้อย่างไร ถูกต้องดังต่อไปนี้: class MyCustomError < StandardError attr_reader :object def initialize(message, object) super(message) @object = object end end แล้ว: raise MyCustomError.new(anObject), "A …

10
ฉันจะจับ 404 ได้อย่างไร
ฉันมีรหัสต่อไปนี้: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "HEAD"; request.Credentials = MyCredentialCache; try { request.GetResponse(); } catch { } ฉันจะตรวจจับข้อผิดพลาด 404 ที่เฉพาะเจาะจงได้อย่างไร WebExceptionStatus.ProtocolError สามารถตรวจพบได้เฉพาะข้อผิดพลาดที่เกิดขึ้น แต่ไม่ได้ระบุรหัสที่แน่นอนของข้อผิดพลาด ตัวอย่างเช่น: catch (WebException ex) { if (ex.Status != WebExceptionStatus.ProtocolError) { throw ex; } } มีประโยชน์ไม่เพียงพอ ... ข้อยกเว้นโปรโตคอลอาจเป็น 401, 503, 403 อะไรก็ได้จริงๆ

15
การใช้ goto อย่างถูกต้องสำหรับการจัดการข้อผิดพลาดใน C?
คำถามนี้เป็นผลมาจากการสนทนาที่น่าสนใจที่ programming.reddit.com เมื่อไม่นานมานี้ โดยทั่วไปแล้วจะเดือดตามรหัสต่อไปนี้: int foo(int bar) { int return_value = 0; if (!do_something( bar )) { goto error_1; } if (!init_stuff( bar )) { goto error_2; } if (!prepare_stuff( bar )) { goto error_3; } return_value = do_the_thing( bar ); error_3: cleanup_3(); error_2: cleanup_2(); error_1: cleanup_1(); return return_value; } …

4
ทางออกที่ดีสำหรับการรอคอยในการลอง / จับ / ในที่สุด?
ฉันต้องเรียกใช้asyncเมธอดในcatchบล็อกก่อนที่จะโยนข้อยกเว้นอีกครั้ง (ด้วยการติดตามสแต็ก) เช่นนี้ try { // Do something } catch { // <- Clean things here with async methods throw; } แต่น่าเสียดายที่คุณไม่สามารถใช้awaitใน a catchหรือfinallyblock ได้ ฉันได้เรียนรู้ว่าเป็นเพราะคอมไพเลอร์ไม่มีทางย้อนกลับไปในcatchบล็อกเพื่อดำเนินการตามawaitคำสั่งของคุณหรืออะไรทำนองนั้น ... ฉันพยายามใช้Task.Wait()เพื่อแทนที่awaitและฉันมีการหยุดชะงัก ฉันค้นหาบนเว็บว่าฉันจะหลีกเลี่ยงปัญหานี้ได้อย่างไรและพบไซต์นี้ เนื่องจากฉันไม่สามารถเปลี่ยนasyncวิธีการและฉันไม่รู้ว่าพวกเขาใช้ConfigureAwait(false)หรือไม่ฉันจึงสร้างวิธีการเหล่านี้ขึ้นมาซึ่งใช้วิธีFunc<Task>เริ่มต้นวิธี async เมื่อเราอยู่ในเธรดอื่น (เพื่อหลีกเลี่ยงการหยุดชะงัก) และรอให้มันเสร็จสิ้น: public static void AwaitTaskSync(Func<Task> action) { Task.Run(async () => await action().ConfigureAwait(false)).Wait(); } public static TResult AwaitTaskSync<TResult>(Func<Task<TResult>> …

4
เหตุใดการยืนยันนี้จึงทำให้เกิดข้อยกเว้นของรูปแบบเมื่อเปรียบเทียบโครงสร้าง
ฉันพยายามยืนยันความเท่าเทียมกันของสองSystem.Drawing.Sizeโครงสร้างและฉันได้รับข้อยกเว้นของรูปแบบแทนการยืนยันความล้มเหลวที่คาดไว้ [TestMethod] public void AssertStructs() { var struct1 = new Size(0, 0); var struct2 = new Size(1, 1); //This throws a format exception, "System.FormatException: Input string was not in a correct format." Assert.AreEqual(struct1, struct2, "Failed. Expected {0}, actually it is {1}", struct1, struct2); //This assert fails properly, "Failed. Expected {Width=0, …

1
ข้อยกเว้นใน Yesod
ฉันได้สร้างภูตที่ใช้รูปแบบดั้งเดิมของipc(เทลเน็ตและส่งสตริงที่มีคำบางคำตามลำดับ) ฉันหักออกและตอนนี้กำลังใช้JSONเพื่อส่งข้อความไปยังYesodเซิร์ฟเวอร์ อย่างไรก็ตามมีบางสิ่งที่ฉันชอบมากเกี่ยวกับการออกแบบของฉันและฉันไม่แน่ใจว่าตอนนี้ตัวเลือกของฉันคืออะไร นี่คือสิ่งที่ฉันกำลังทำ: buildManager :: Phase -> IO () buildManager phase = do let buildSeq = findSeq phase jid = JobID $ pack "8" config = MkConfig $ Just jid flip C.catch exceptionHandler $ runReaderT (sequence_ $ buildSeq <*> stages) config -- ^^ I would really like to keep …

25
วิธีที่ดีในการห่อหุ้ม Integer.parseInt ()
ฉันมีโปรเจ็กต์ที่เรามักจะใช้Integer.parseInt()ในการแปลง String เป็น int เมื่อมีบางอย่างผิดพลาด (ตัวอย่างเช่นStringไม่ใช่ตัวเลข แต่เป็นตัวอักษรaหรืออะไรก็ตาม) วิธีนี้จะทำให้เกิดข้อยกเว้น อย่างไรก็ตามหากฉันต้องจัดการกับข้อยกเว้นในโค้ดของฉันทุกที่สิ่งนี้จะเริ่มดูน่าเกลียดอย่างรวดเร็ว ฉันต้องการใส่วิธีนี้ แต่ฉันไม่มีเงื่อนงำในการส่งคืนค่าที่สะอาดเพื่อแสดงว่าการแปลงผิดพลาด ใน C ++ ฉันสามารถสร้างเมธอดที่ยอมรับตัวชี้ไปที่ int และปล่อยให้เมธอดนั้นส่งคืนจริงหรือเท็จ อย่างไรก็ตามเท่าที่ฉันรู้สิ่งนี้ไม่สามารถทำได้ใน Java ฉันยังสามารถสร้างออบเจ็กต์ที่มีตัวแปรจริง / เท็จและค่าที่แปลงแล้ว แต่ดูเหมือนจะไม่เหมาะเช่นกัน สิ่งเดียวกันนี้เกิดขึ้นกับมูลค่าทั่วโลกและสิ่งนี้อาจทำให้ฉันมีปัญหากับมัลติเธรด มีวิธีที่สะอาดในการทำเช่นนี้หรือไม่?

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