ข้อยกเว้นไม่มีรายละเอียดที่เป็นประโยชน์เนื่องจากแนวคิดของข้อยกเว้นยังไม่ครบกำหนดภายในวินัยวิศวกรรมซอฟต์แวร์ดังนั้นโปรแกรมเมอร์จำนวนมากจึงไม่เข้าใจอย่างเต็มที่และดังนั้นจึงไม่ปฏิบัติต่ออย่างถูกต้อง
ใช่IndexOutOfRangeException
ควรมีดัชนีที่แม่นยำซึ่งอยู่นอกช่วงเช่นเดียวกับช่วงที่ถูกต้องในเวลาที่มีการโยนทิ้งและเป็นที่น่ารังเกียจในนามของผู้สร้างรันไทม์. NET ที่ไม่มี ใช่table or view not found
ข้อยกเว้นของ Oracle ควรมีชื่อของตารางหรือมุมมองที่ไม่พบและความจริงที่ว่ามันไม่ได้ดูถูกในนามของใครก็ตามที่รับผิดชอบเรื่องนี้
ความสับสนเกิดขึ้นจากแนวคิดดั้งเดิมที่เข้าใจผิดว่าข้อยกเว้นควรมีข้อความที่มนุษย์อ่านได้ซึ่งเกิดจากการขาดความเข้าใจในสิ่งที่เป็นข้อยกเว้นดังนั้นจึงเป็นวงจรอุบาทว์
เนื่องจากผู้คนคิดว่าข้อยกเว้นควรมีข้อความที่มนุษย์อ่านได้พวกเขาเชื่อว่าข้อมูลใดก็ตามที่ถูกดำเนินการโดยข้อยกเว้นควรจัดรูปแบบเป็นข้อความที่มนุษย์อ่านได้และจากนั้นพวกเขาก็เบื่อที่จะเขียนข้อความที่มนุษย์อ่านได้ทั้งหมด การสร้างรหัสหรือพวกเขากลัวว่าการทำเช่นนั้นอาจเป็นการเปิดเผยข้อมูลที่ไม่เหมาะสมกับสายตาที่แอบมองไม่เห็น (ปัญหาด้านความปลอดภัยที่กล่าวถึงโดยคำตอบอื่น ๆ )
แต่ความจริงของเรื่องคือพวกเขาไม่ควรกังวลเกี่ยวกับเรื่องนั้นเพราะข้อยกเว้นไม่ควรมีข้อความที่มนุษย์อ่านได้ ข้อยกเว้นคือสิ่งที่โปรแกรมเมอร์เท่านั้นที่ควรเห็นและ / หรือจัดการกับ หากไม่จำเป็นต้องนำเสนอข้อมูลความล้มเหลวให้กับผู้ใช้จะต้องดำเนินการในระดับสูงมากในลักษณะที่ซับซ้อนและในภาษาของผู้ใช้ซึ่งการพูดเชิงสถิติไม่น่าจะเป็นภาษาอังกฤษ
ดังนั้นสำหรับเราโปรแกรมเมอร์"ข้อความ" ของข้อยกเว้นคือชื่อคลาสของข้อยกเว้นและข้อมูลอื่นใดที่เกี่ยวข้องกับข้อยกเว้นควรถูกคัดลอกไปยังตัวแปรสมาชิก (สุดท้าย / อ่านได้อย่างเดียว) ของวัตถุข้อยกเว้น โดยเฉพาะอย่างยิ่งทุก ๆ เล็กน้อยคิดว่าเป็นไปได้ ด้วยวิธีนี้ไม่จำเป็นต้องสร้างข้อความ (หรือควร) ดังนั้นจึงไม่สามารถมองเห็นได้
เพื่อแก้ไขข้อกังวลที่แสดงออกโดย Thomas Owens ในความคิดเห็นด้านล่าง:
ใช่แน่นอนในบางระดับคุณจะสร้างข้อความบันทึกเกี่ยวกับข้อยกเว้น แต่คุณได้เห็นปัญหาของสิ่งที่คุณพูดแล้ว: ในอีกด้านหนึ่งข้อความบันทึกข้อยกเว้นที่ไม่มีการติดตามสแต็กนั้นไม่มีประโยชน์ แต่ในทางกลับกันคุณไม่ต้องการให้ผู้ใช้เห็นการติดตามสแต็กข้อยกเว้นทั้งหมด อีกครั้งปัญหาของเราที่นี่คือมุมมองของเราเบ้โดยการปฏิบัติแบบดั้งเดิม ไฟล์บันทึกนั้นเป็นข้อความธรรมดาซึ่งอาจใช้ได้ในขณะที่วินัยของเราอยู่ในช่วงเริ่มต้น แต่อาจจะไม่มีอีกต่อไปหากมีข้อกังวลด้านความปลอดภัยไฟล์บันทึกจะต้องเป็นไบนารี่และ / หรือเข้ารหัส
ไม่ว่าจะเป็นข้อความไบนารีหรือข้อความธรรมดาไฟล์บันทึกควรพิจารณาเป็นสตรีมที่แอปพลิเคชันจะทำการตรวจสอบข้อมูลการดีบัก สตรีมดังกล่าวจะใช้สำหรับสายตาของโปรแกรมเมอร์เท่านั้นและงานในการสร้างข้อมูลการดีบักสำหรับข้อยกเว้นควรง่ายพอ ๆ กับการทำให้ข้อยกเว้นเป็นอนุกรมลงในสตรีมบันทึกการดีบัก ด้วยวิธีนี้เมื่อดูที่บันทึกคุณจะเห็นชื่อคลาสของข้อยกเว้น (ซึ่งตามที่ฉันได้กล่าวไปแล้วนั้นมีไว้เพื่อวัตถุประสงค์ในทางปฏิบัติ "ข้อความ",) ตัวแปรสมาชิกข้อยกเว้นแต่ละตัวซึ่งอธิบายทุกอย่างที่เกี่ยวข้อง - และปฏิบัติเพื่อรวมในบันทึกและการติดตามสแต็คทั้งหมด โปรดสังเกตว่าการจัดรูปแบบของข้อความข้อยกเว้นที่มนุษย์สามารถอ่านได้หายไปจากกระบวนการนี้อย่างชัดเจน
PS
ความคิดของฉันอีกสองสามข้อสามารถพบได้ในคำตอบนี้: วิธีการเขียนข้อความยกเว้นที่ดี
PPS
ดูเหมือนว่ามีคนจำนวนมากที่ถูกติ๊กถูกปิดโดยข้อเสนอแนะของฉันเกี่ยวกับไฟล์บันทึกไบนารีดังนั้นฉันจึงแก้ไขคำตอบอีกครั้งเพื่อให้ชัดเจนยิ่งขึ้นว่าสิ่งที่ฉันแนะนำที่นี่ไม่ใช่ไฟล์บันทึกควรเป็นไบนารี แต่นั่น ไฟล์บันทึกอาจเป็นเลขฐานสองหากจำเป็น