คำถามติดแท็ก exceptions

ข้อยกเว้นคือการเกิดขึ้นในกระบวนการแอปพลิเคชันที่ต้องการเบี่ยงเบนจากโฟลว์ปกติของโปรแกรม

9
ฉันควรยอมรับคอลเลกชันที่ว่างเปล่าในวิธีการของฉันที่ทำซ้ำมากกว่าพวกเขา
ฉันมีวิธีการที่ตรรกะทั้งหมดจะดำเนินการภายในวง foreach ที่ iterates มากกว่าพารามิเตอร์ของวิธีการ: public IEnumerable<TransformedNode> TransformNodes(IEnumerable<Node> nodes) { foreach(var node in nodes) { // yadda yadda yadda yield return transformedNode; } } ในกรณีนี้การส่งคอลเล็กชันว่างเปล่าจะส่งผลให้เกิดคอลเล็กชันที่ว่างเปล่า แต่ฉันสงสัยว่ามันไม่ฉลาด ตรรกะของฉันที่นี่คือถ้าใครบางคนกำลังเรียกวิธีนี้พวกเขาตั้งใจจะส่งผ่านข้อมูลและจะส่งเฉพาะคอลเลกชันที่ว่างเปล่าไปยังวิธีการของฉันในสถานการณ์ที่ผิดพลาด ฉันควรจะตรวจจับพฤติกรรมนี้และทิ้งข้อยกเว้นไว้หรือเป็นวิธีที่ดีที่สุดในการส่งคืนคอลเลกชันที่ว่างเปล่า?

11
มีกรณีที่เกิดขึ้นจริงสำหรับ C ++ โดยไม่มีข้อยกเว้นหรือไม่? [ปิด]
ในเมื่อใดจึงจะใช้ C เหนือ C ++ และ C ++ เหนือ C? มีคำสั่ง wrt ถึงข้อยกเว้นขนาดโค้ด / C ++: คำตอบของเจอรี่ (ท่ามกลางประเด็นอื่น ๆ ): (... ) มันมีแนวโน้มที่จะยากที่จะผลิตไฟล์เอ็กซีคิวต์เล็ก ๆ อย่างแท้จริงด้วย C ++ สำหรับระบบขนาดเล็กจริงๆคุณไม่ค่อยเขียนโค้ดจำนวนมากและส่วนเพิ่มเติม (... ) ที่ฉันถามว่าทำไมที่จะเป็นไปได้ซึ่ง Jerry ตอบ: สิ่งสำคัญคือ C ++ รวมถึงการจัดการข้อยกเว้นซึ่ง (อย่างน้อยโดยปกติ) จะเพิ่มขนาดขั้นต่ำให้กับขนาดที่สามารถเรียกใช้งานได้ คอมไพเลอร์ส่วนใหญ่จะให้คุณปิดการใช้งานการจัดการข้อยกเว้น แต่เมื่อคุณทำผลลัพธ์จะไม่มาก C ++ ( ... ) ซึ่งฉันไม่สงสัยจริงๆในระดับโลกทางเทคนิคจริง ดังนั้นฉันสนใจ (หมดจดจากความอยากรู้อยากเห็น) ที่จะได้ยินจากตัวอย่างในโลกแห่งความจริงที่โครงการเลือก …
40 c++  exceptions 

7
เหตุใด“ การอ้างอิงวัตถุไม่ได้ถูกตั้งค่าเป็นอินสแตนซ์ของวัตถุ” บอกเราว่าวัตถุใด
เรากำลังเปิดตัวระบบและบางครั้งเราได้รับข้อยกเว้นที่มีชื่อเสียงพร้อมกับข้อความNullReferenceExceptionObject reference not set to an instance of an object อย่างไรก็ตามในวิธีการที่เรามีวัตถุเกือบ 20 ชิ้นการมีบันทึกซึ่งบอกว่าวัตถุนั้นเป็นโมฆะนั้นไม่มีประโยชน์เลย มันเหมือนกับบอกคุณว่าเมื่อคุณเป็นตัวแทนความปลอดภัยของการสัมมนาคนหนึ่งใน 100 คนเป็นผู้ก่อการร้าย มันไม่มีประโยชน์กับคุณเลย คุณควรได้รับข้อมูลเพิ่มเติมหากคุณต้องการตรวจสอบว่าชายคนไหนเป็นคนที่คุกคาม ในทำนองเดียวกันถ้าเราต้องการที่จะลบข้อผิดพลาดเราจำเป็นต้องรู้ว่าวัตถุใดเป็นโมฆะ ตอนนี้มีบางอย่างหมกมุ่นอยู่ในใจฉันมาหลายเดือนแล้วและนั่นก็คือ: เหตุใด. NET จึงไม่ให้ชื่อเราหรืออย่างน้อยก็ประเภทของการอ้างอิงวัตถุซึ่งเป็นโมฆะ? . ไม่เข้าใจประเภทจากการสะท้อนกลับหรือแหล่งอื่น ๆ นอกจากนี้แนวปฏิบัติที่ดีที่สุดที่จะเข้าใจว่าวัตถุใดเป็นโมฆะ? เราควรทดสอบความสามารถของวัตถุในบริบทเหล่านี้ด้วยตนเองเสมอและบันทึกผลลัพธ์หรือไม่ มีวิธีที่ดีกว่า? อัปเดต: ข้อยกเว้นThe system cannot find the file specifiedมีลักษณะเดียวกัน คุณไม่พบไฟล์ใดจนกว่าคุณจะแนบกับกระบวนการและดีบัก ฉันเดาว่าข้อยกเว้นประเภทนี้จะฉลาดขึ้น มันจะดีกว่าไหมถ้า. NET สามารถบอกเราc:\temp.txt doesn't exist.แทนข้อความทั่วไปได้? ในฐานะนักพัฒนาฉันลงคะแนนใช่

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

8
มีข้อยกเว้นแนวคิด OOP หรือไม่
เมื่ออ่านโพสต์เมื่อวานนี้ฉันรู้ว่าฉันไม่รู้เกี่ยวกับที่มาของข้อยกเว้นมากนัก เป็นแนวคิดที่เกี่ยวข้องกับ OOP เท่านั้นหรือไม่ ฉันมักจะคิดว่ามันเป็น แต่อีกครั้งมีข้อยกเว้นฐานข้อมูล

7
อาจจะเป็นข้อยกเว้น Monad
ฉันสงสัยว่าอะไรคือข้อดีของMaybe monad ที่มีข้อยกเว้น? ดูเหมือนว่าMaybeเป็นวิธีการทางtry..catchไวยากรณ์ที่ชัดเจน (และค่อนข้างใช้พื้นที่มาก) อัปเดตโปรดทราบว่าฉันตั้งใจจะไม่พูดถึง Haskell

3
มันเป็นเรื่องธรรมดาหรือไม่ที่จะยกระดับ NotImplementedError สำหรับวิธีการที่การดำเนินการอยู่ระหว่างดำเนินการ แต่ไม่ได้วางแผนที่จะเป็นนามธรรมหรือไม่?
ฉันชอบที่จะเพิ่มNotImplementedErrorวิธีการใด ๆ ที่ฉันต้องการที่จะใช้ แต่ที่ฉันยังไม่ได้ไปรอบ ๆ เพื่อทำมัน ฉันอาจมีการนำไปใช้บางส่วนแล้ว แต่เสริมด้วยraise NotImplementedError()เพราะฉันยังไม่ชอบ ในทางตรงกันข้ามฉันก็ชอบที่จะยึดถืออนุสัญญาเพราะจะทำให้คนอื่น ๆ สามารถรักษารหัสของฉันได้ง่ายขึ้นและการประชุมอาจมีอยู่ด้วยเหตุผลที่ดี อย่างไรก็ตามเอกสาร Pythons สำหรับสถานะNotImplementedError : ข้อยกเว้นนี้ได้มาจาก RuntimeError ในคลาสพื้นฐานที่ผู้ใช้กำหนดเมธอด abstract ควรเพิ่มข้อยกเว้นนี้เมื่อต้องการคลาสที่ได้รับเพื่อแทนที่เมธอด นั่นเป็นกรณีการใช้งานที่เป็นทางการที่เฉพาะเจาะจงมากกว่าที่ฉันอธิบาย มันเป็นสไตล์ที่ดีธรรมดาที่จะยกระดับNotImplementedErrorเพียงเพื่อระบุว่าส่วนหนึ่งของ API นี้เป็นงานที่อยู่ระหว่างดำเนินการหรือไม่ ถ้าไม่มีวิธีมาตรฐานที่แตกต่างกันในการบ่งชี้สิ่งนี้หรือไม่?

5
ฉันจะสร้างและบังคับใช้สัญญาเพื่อการยกเว้นได้อย่างไร
ฉันพยายามโน้มน้าวให้ทีมของฉันอนุญาตให้ใช้ข้อยกเว้นใน C ++ แทนการส่งคืนบูลisSuccessfulหรือ enum ด้วยรหัสข้อผิดพลาด อย่างไรก็ตามฉันไม่สามารถตอบโต้คำวิจารณ์ของเขาได้ พิจารณาห้องสมุดนี้: class OpenFileException() : public std::runtime_error { } void B(); void C(); /** Does blah and blah. */ void B() { // The developer of B() either forgot to handle C()'s exception or // chooses not to handle it and let it go …
33 c++  exceptions 

8
การขว้างข้อยกเว้นเป็นการต่อต้านแบบที่นี่หรือไม่?
ฉันเพิ่งพูดคุยเกี่ยวกับตัวเลือกการออกแบบหลังจากการตรวจสอบโค้ด ฉันสงสัยว่าความคิดเห็นของคุณคืออะไร มีPreferencesคลาสนี้ซึ่งเป็นที่เก็บข้อมูลสำหรับคู่คีย์ - ค่า ค่า Null นั้นถูกกฎหมาย (สำคัญมาก) เราคาดหวังว่าค่าบางอย่างอาจยังไม่ถูกบันทึกและเราต้องการจัดการกับกรณีเหล่านี้โดยอัตโนมัติโดยเริ่มต้นด้วยค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าเมื่อมีการร้องขอ วิธีแก้ปัญหาที่กล่าวถึงใช้รูปแบบต่อไปนี้ (หมายเหตุ: นี่ไม่ใช่รหัสจริงแน่นอน - มันง่ายสำหรับจุดประสงค์ในการอธิบาย): public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch …

3
ข้อผิดพลาดในการพิจารณาการจัดการ
ปัญหา: ตั้งแต่เวลานานฉันกังวลเกี่ยวกับexceptionsกลไกเพราะฉันรู้สึกว่ามันไม่ได้แก้ไขสิ่งที่ควร เคลม: มีการถกเถียงกันนานเกี่ยวกับหัวข้อนี้และพวกเขาส่วนใหญ่มักจะพยายามเปรียบเทียบexceptionsและส่งกลับรหัสข้อผิดพลาด นี่ไม่ใช่หัวข้อที่แน่นอน พยายามกำหนดข้อผิดพลาดฉันจะเห็นด้วยกับ CppCoreGuidelines จาก Bjarne Stroustrup & Herb Sutter ข้อผิดพลาดหมายความว่าฟังก์ชันไม่สามารถบรรลุวัตถุประสงค์ที่โฆษณาไว้ การเรียกร้อง: exceptionกลไกคือ semantic ภาษาสำหรับการจัดการข้อผิดพลาด การเรียกร้อง: สำหรับฉันมี "ไม่มีข้อแก้ตัว" สำหรับฟังก์ชั่นที่ไม่ได้งาน: เพราะเรากำหนดเงื่อนไขล่วงหน้า / โพสต์ผิดดังนั้นฟังก์ชันไม่สามารถรับประกันผลลัพธ์ได้หรือกรณีพิเศษบางกรณีไม่ถือว่าสำคัญพอสำหรับการใช้เวลาในการพัฒนา ทางออก เมื่อพิจารณาแล้ว IMO ความแตกต่างระหว่างการจัดการรหัสปกติและรหัสข้อผิดพลาดคือ (ก่อนการติดตั้ง) บรรทัดที่เป็นอัตนัย การเรียกร้อง: การใช้ข้อยกเว้นเพื่อระบุว่าเมื่อใดที่ไม่ได้รักษาเงื่อนไขก่อนหรือหลังการโพสต์ไว้เป็นอีกจุดประสงค์หนึ่งของexceptionกลไก ฉันไม่ได้กำหนดเป้าหมายการใช้งานของexceptionsที่นี่ ในหนังสือหลายบทช่วยสอนและแหล่งข้อมูลอื่น ๆ พวกเขามักจะแสดงการจัดการข้อผิดพลาดเป็นศาสตร์ที่ค่อนข้างมีวัตถุประสงค์ซึ่งแก้ไขได้ด้วยexceptionsและคุณเพียงแค่ต้องการให้catchพวกเขามีซอฟต์แวร์ที่แข็งแกร่งสามารถกู้คืนจากสถานการณ์ใด ๆ แต่เป็นเวลาหลายปีในฐานะนักพัฒนาทำให้ฉันเห็นปัญหาจากแนวทางที่แตกต่าง: โปรแกรมเมอร์มีแนวโน้มที่จะทำให้งานของพวกเขาง่ายขึ้นโดยการโยนข้อยกเว้นเมื่อกรณีที่เฉพาะเจาะจงดูยากเกินกว่าที่จะดำเนินการอย่างระมัดระวัง กรณีทั่วไปนี้คือ: ปัญหาหน่วยความจำไม่เพียงพอ, ปัญหาเต็มรูปแบบดิสก์, ปัญหาไฟล์ที่เสียหายเป็นต้นซึ่งอาจเพียงพอ แต่ไม่สามารถตัดสินใจได้เสมอจากระดับสถาปัตยกรรม โปรแกรมเมอร์ไม่อ่านเอกสารอย่างละเอียดเกี่ยวกับข้อยกเว้นในไลบรารีและมักจะไม่ทราบว่าเมื่อใดและเมื่อใด นอกจากนี้แม้ว่าพวกเขารู้ว่าพวกเขาไม่ได้จัดการพวกเขาจริงๆ โปรแกรมเมอร์มักจะไม่ได้รับข้อยกเว้นเร็วพอและเมื่อพวกเขาทำมันส่วนใหญ่จะเข้าสู่ระบบและโยนต่อไป (อ้างถึงจุดแรก) สิ่งนี้มีสองผล: …

5
ในที่สุดการใช้ประโยคในการทำงานหลังจากกลับมาสไตล์ไม่ดี / เป็นอันตรายหรือไม่?
ในฐานะส่วนหนึ่งของการเขียน Iterator ฉันพบว่าตัวเองเขียนโค้ดต่อไปนี้ (การจัดการข้อผิดพลาดในการลอก) public T next() { try { return next; } finally { next = fetcher.fetchNext(next); } } พบว่าอ่านง่ายกว่าเล็กน้อย public T next() { T tmp = next; next = fetcher.fetchNext(next); return tmp; } ฉันรู้ว่ามันเป็นตัวอย่างง่ายๆที่ความแตกต่างของความสามารถในการอ่านอาจจะไม่มากนัก แต่ฉันสนใจในความคิดเห็นทั่วไปว่าไม่ดีที่จะลองใช้ในที่สุดในกรณีเช่นนี้ที่ไม่มีข้อยกเว้นที่เกี่ยวข้องหรือ ถ้ามันเป็นที่ต้องการจริง ๆ เมื่อมันลดความซับซ้อนของรหัส ถ้ามันไม่ดี: ทำไม สไตล์ประสิทธิภาพข้อผิดพลาด ... ? บทสรุป ขอบคุณคำตอบทั้งหมดของคุณ! ฉันเดาข้อสรุป (อย่างน้อยสำหรับฉัน) คือตัวอย่างแรกอาจอ่านง่ายกว่าถ้ามันเป็นรูปแบบทั่วไป …

7
วิธีการจัดการข้อยกเว้นที่ไม่สามารถจัดการได้? (ยุติแอปพลิเคชั่น vs. รักษาชีวิต)
แนวปฏิบัติที่ดีที่สุดคืออะไรหากมีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นในแอปพลิเคชันเดสก์ท็อป ฉันกำลังคิดที่จะแสดงข้อความถึงผู้ใช้เพื่อให้เขาสามารถติดต่อฝ่ายสนับสนุน ฉันจะแนะนำให้ผู้ใช้รีสตาร์ทแอปพลิเคชัน แต่ไม่บังคับ คล้ายกับสิ่งที่กล่าวถึงที่นี่: ux.stackexchange.com - วิธีที่ดีที่สุดในการจัดการข้อผิดพลาดของแอปพลิเคชันคืออะไร โครงการนี้เป็นแอปพลิเคชั่น. NET WPF ดังนั้นข้อเสนอที่อธิบายไว้อาจมีลักษณะเช่นนี้ (โปรดทราบว่านี่เป็นตัวอย่างแบบง่าย ๆ อาจเป็นไปได้ที่จะซ่อนรายละเอียดข้อยกเว้นจนกว่าผู้ใช้จะคลิกที่ "แสดงรายละเอียด" รายงานข้อผิดพลาดได้อย่างง่ายดาย): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact …

7
โปรแกรม C ++ ควรจับข้อยกเว้นทั้งหมดและป้องกันข้อยกเว้นจากการเดือดปุด ๆ ในอดีต main () หรือไม่?
ฉันได้รับคำแนะนำครั้งหนึ่งว่าในที่สุดโปรแกรม C ++ ควรจะได้รับการยกเว้นทั้งหมด เหตุผลที่ให้ไว้ในขณะนั้นคือโปรแกรมที่อนุญาตให้มีการยกเว้นเกิดฟองขึ้นนอกmain()เข้าสู่สถานะผีดิบแปลก ๆ ฉันบอกเรื่องนี้เมื่อหลายปีก่อนและในการหวนกลับฉันเชื่อว่าปรากฏการณ์ที่สังเกตได้เกิดจากการทิ้งแกนกลางขนาดใหญ่ที่ยาวเป็นพิเศษจากโครงการที่สงสัย ในเวลานี้ดูเหมือนจะแปลก แต่น่าเชื่อถือ มันไร้สาระโดยสิ้นเชิงที่ C ++ ควร "ลงโทษ" โปรแกรมเมอร์ที่ไม่จับข้อยกเว้นทั้งหมด แต่หลักฐานก่อนหน้าฉันดูเหมือนจะสำรองข้อมูลนี้ไว้ สำหรับโครงการที่มีปัญหาโปรแกรมที่โยนข้อยกเว้นที่ไม่ได้ตรวจจับนั้นดูเหมือนจะเข้าสู่สถานะผีดิบแปลก ๆ หรืออย่างที่ฉันคิดว่าสาเหตุอยู่ในขณะนี้กระบวนการที่อยู่ท่ามกลางการถ่ายโอนข้อมูลหลักที่ไม่ต้องการนั้นยากที่จะหยุด (สำหรับทุกคนที่สงสัยว่าทำไมสิ่งนี้ถึงไม่ชัดเจนในเวลานั้น: โครงการสร้างเอาต์พุตจำนวนมากในหลายไฟล์จากหลายกระบวนการซึ่งบดบังaborted (core dumped)ข้อความประเภทใด ๆ ได้อย่างมีประสิทธิภาพและในกรณีนี้การตรวจสอบการตายของแกนทิ้งไม่ได้ ไม่ใช่เทคนิคการดีบักที่สำคัญดังนั้นการถ่ายโอนข้อมูลหลักจึงไม่ได้รับการคิดมากปัญหาของโปรแกรมมักจะไม่ได้ขึ้นอยู่กับสถานะที่สะสมจากเหตุการณ์ต่าง ๆ ในช่วงเวลาหนึ่งโดยโปรแกรมที่ใช้งานมานาน 1 ชั่วโมง) ดังนั้นจึงมีประโยชน์มากกว่าที่จะรันโปรแกรมอีกครั้งโดยใช้อินพุตเดียวกันจากการสร้างข้อบกพร่องหรือในตัวดีบักเพื่อรับข้อมูลเพิ่มเติม) ขณะนี้ผมไม่แน่ใจว่ามีความได้เปรียบที่สำคัญใด ๆ main()หรือข้อเสียของการจับข้อยกเว้นเพียงเพื่อวัตถุประสงค์ในการป้องกันการยกเว้นจากการออก ข้อได้เปรียบเล็ก ๆ น้อย ๆ ที่ฉันคิดได้ในการยอมให้มีข้อยกเว้นเกิดฟองขึ้นในอดีตmain()คือทำให้เกิดผลลัพธ์std::exception::what()ที่จะพิมพ์ไปยังเทอร์มินัล (อย่างน้อยก็ด้วยโปรแกรมที่คอมไพล์ด้วย gcc บน Linux) บนมืออื่น ๆ นี้เป็นที่น่ารำคาญที่จะบรรลุโดยแทนที่จะจับข้อยกเว้นทั้งหมดมาจากstd::exceptionและการพิมพ์ผลมาจากstd::exception::what()และถ้ามันเป็นที่พึงปรารถนาที่จะพิมพ์ข้อความจากข้อยกเว้นที่ไม่ได้มาจากstd::exceptionนั้นก็จะต้องถูกจับก่อนที่จะออกmain()เพื่อพิมพ์ ข้อความ. ข้อเสียเปรียบเล็กน้อยที่ฉันสามารถคิดได้ในการอนุญาตให้มีการยกเว้นเกิดฟองขึ้นในอดีตmain()คือการทิ้งขยะที่ไม่ต้องการ สำหรับกระบวนการที่ใช้หน่วยความจำจำนวนมากสิ่งนี้อาจสร้างความรำคาญและควบคุมพฤติกรรมการถ่ายโอนข้อมูลหลักจากโปรแกรมที่ต้องการการเรียกใช้ฟังก์ชันเฉพาะระบบปฏิบัติการ ในทางตรงกันข้ามถ้าถ่ายโอนข้อมูลหลักและออกเป็นที่ต้องการแล้วนี้อาจแทนจะประสบความสำเร็จในเวลาใด …
29 c++  exceptions 

7
มันโอเคที่จะใช้ข้อยกเว้นเป็นเครื่องมือในการ "จับ" ข้อผิดพลาดก่อนหรือไม่?
ฉันใช้ข้อยกเว้นเพื่อตรวจสอบปัญหาก่อน ตัวอย่างเช่น: public int getAverageAge(Person p1, Person p2){ if(p1 == null || p2 == null) throw new IllegalArgumentException("One or more of input persons is null"). return (p1.getAge() + p2.getAge()) / 2; } โปรแกรมของฉันไม่ควรผ่านnullในฟังก์ชั่นนี้ ฉันไม่เคยตั้งใจที่จะ อย่างไรก็ตามในขณะที่เราทุกคนรู้ว่าสิ่งที่ไม่ได้ตั้งใจเกิดขึ้นในการเขียนโปรแกรม การโยนข้อยกเว้นหากปัญหานี้เกิดขึ้นช่วยให้ฉันสามารถตรวจสอบและแก้ไขได้ก่อนที่จะทำให้เกิดปัญหามากขึ้นในที่อื่น ๆ ในโปรแกรม ข้อยกเว้นหยุดโปรแกรมและบอกฉันว่า "มีสิ่งไม่ดีเกิดขึ้นที่นี่แก้ไขได้" แทนที่จะเป็นการnullเคลื่อนไหวรอบ ๆ โปรแกรมทำให้เกิดปัญหาที่อื่น ตอนนี้คุณพูดถูกในกรณีนี้มันอาจnullจะทำให้เกิดNullPointerExceptionในทันทีดังนั้นมันอาจไม่ใช่ตัวอย่างที่ดีที่สุด แต่ให้พิจารณาวิธีการเช่นนี้ตัวอย่างเช่น: public void registerPerson(Person person){ persons.add(person); …

12
นักพัฒนามีปัญหาอะไรกับข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์? [ปิด]
มันยังคง astounds ฉันว่าในวันนี้และอายุผลิตภัณฑ์ที่มีปีของการใช้งานภายใต้เข็มขัดของพวกเขาสร้างขึ้นโดยทีมงานมืออาชีพยังคงไปในวันนี้ - ไม่ให้ข้อความผิดพลาดที่เป็นประโยชน์ให้กับผู้ใช้ ในบางกรณีการเพิ่มข้อมูลเพิ่มเติมเพียงเล็กน้อยอาจช่วยให้ผู้ใช้ไม่ต้องประสบปัญหาอีกต่อไป โปรแกรมที่สร้างข้อผิดพลาดสร้างขึ้นด้วยเหตุผล มีทุกสิ่งที่จำเป็นเพื่อแจ้งให้ผู้ใช้ทราบถึงสาเหตุที่ทำให้เกิดข้อผิดพลาด และดูเหมือนว่าการให้ข้อมูลเพื่อช่วยเหลือผู้ใช้มีความสำคัญต่ำ ฉันคิดว่านี่เป็นความล้มเหลวครั้งใหญ่ ตัวอย่างหนึ่งมาจาก SQL Server เมื่อคุณลองและกู้คืนฐานข้อมูลที่ใช้งานอยู่มันจะไม่ถูกต้องนัก SQL Server รู้ว่ากระบวนการและแอปพลิเคชันใดกำลังเข้าถึง เหตุใดจึงไม่สามารถรวมข้อมูลเกี่ยวกับกระบวนการที่ใช้ฐานข้อมูลได้ ฉันรู้ว่าทุกคนไม่ส่งApplicatio_Nameแอตทริบิวต์ในสตริงการเชื่อมต่อของพวกเขา แต่แม้แต่คำแนะนำเกี่ยวกับเครื่องที่เป็นปัญหาอาจมีประโยชน์ ตัวเลือกอื่นเช่น SQL Server (และ mySQL) คือstring or binary data would be truncatedข้อความแสดงข้อผิดพลาดที่น่ารักและรายการเทียบเท่า บ่อยครั้งที่การอ่านคำสั่ง SQL อย่างง่าย ๆ ที่สร้างขึ้นและตารางแสดงว่าคอลัมน์ใดเป็นผู้ร้าย นี่ไม่ใช่กรณีเสมอไปและหากเอ็นจิ้นฐานข้อมูลหยิบขึ้นมาบนข้อผิดพลาดทำไมมันไม่สามารถช่วยเราได้ในเวลานั้นและเพียงแค่บอกเราว่ามันเป็นคอลัมน์ใด ในตัวอย่างนี้คุณสามารถยืนยันว่าอาจมีการแสดงที่มีประสิทธิภาพในการตรวจสอบและสิ่งนี้อาจเป็นอุปสรรคต่อผู้เขียน ใช่ฉันจะซื้อมัน เมื่อกลไกจัดการฐานข้อมูลรู้ว่ามีข้อผิดพลาดจะทำการเปรียบเทียบอย่างรวดเร็วหลังจากความจริงระหว่างค่าที่จะถูกจัดเก็บเทียบกับความยาวคอลัมน์ จากนั้นแสดงให้ผู้ใช้เห็น Adaptors Table ที่น่ากลัวของ ASP.NET ก็มีความผิดเช่นกัน สามารถดำเนินการค้นหาและสามารถได้รับข้อความแสดงข้อผิดพลาดที่บอกว่าข้อ จำกัด บางแห่งกำลังถูกละเมิด …

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