เหตุใดจึงมีข้อผิดพลาดตั้งชื่อเป็น "ข้อยกเว้น" แต่ไม่ใช่ "ข้อผิดพลาด" ในภาษาการเขียนโปรแกรม


45

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

มันอาจจะเป็นแทนPageNotFoundErrorPageNotFoundException


41
ไม่ใช่ทุกสถานการณ์ที่ยอดเยี่ยมคือข้อผิดพลาด
Andrew T Finnell

15
มันคือความแตกต่างระหว่างการเลี้ยวรถกับการชนรถ
วิศวกรโลก

6
คุณกำลังพูดถึงการตั้งชื่อของคลาสยกเว้นเฉพาะหรือไม่ จากนั้นให้สังเกตว่าในบางระบบนิเวศนั้นจะถูกเรียกXYErrorเช่นใน Python

6
โปรดทราบว่า Java มีคลาส Error ซึ่งสืบทอดมาจาก Throwable ดูdocs.oracle.com/javase/1.4.2/docs/api/java/lang/Error.htmlสำหรับรายละเอียดเพิ่มเติม คุณอาจต้องการตรวจสอบหมวดหมู่ "คลาสย่อยที่รู้จักโดยตรง"
luiscubal

ฉันอยากจะบอกว่าปริศนานี้ไม่มีอะไรเกี่ยวข้องกับภาษาอังกฤษ การจัดหมวดหมู่แบบลอจิคัลเป็นสิ่งที่ใช้ภาษาพูดที่คุณเลือกได้อย่างคล่องแคล่ว
שינתיאאבישגנת

คำตอบ:


59

พวกเขาไม่จำเป็นต้องเป็นข้อผิดพลาดเลย ความจริงที่ว่าหน้าไม่ได้อาจมีเพียงข้อเท็จจริงที่น่าสนใจมากกว่าข้อผิดพลาดที่เกิดขึ้นจริง ดูเหมือนว่าพวกเขาจะถูกใช้เป็นข้อผิดพลาดเกือบตลอดเวลาฉันยอมรับ แต่บางครั้งพวกเขาก็คุ้นเคยกับการแบ่งลูปหรือแจ้งให้คุณทราบว่าสตริงนั้นไม่ใช่ตัวเลขที่ถูกต้อง สามารถใช้เพื่อเก็บและส่งคืนข้อมูลที่มีประโยชน์มากมายซึ่งเป็นส่วนหนึ่งของผลตอบแทนปกติ (ภาษาบางภาษาค่อนข้างช้าด้วยข้อยกเว้นของพวกเขาในกรณีนี้การขว้างพวกเขาบ่อย ๆ เป็นความคิดที่ไม่ดี) ในทางทฤษฎีแล้วข้อยกเว้นเพียงแค่หมายความว่า "ไม่ได้ผลตอบแทนปกติให้ขึ้นไปที่สแต็กการโทรจนกว่าคุณจะพบคนที่สนใจ ในเรื่องนี้."

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


27
แม้ว่าการใช้กลไกการยกเว้นในขณะที่การควบคุมการไหลสามารถสร้างความสับสนและฉันคิดว่าโดยทั่วไปจะขมวดคิ้ว
ChaosPandion

11
@ChaosPandion: ขึ้นอยู่กับภาษา / วัฒนธรรม
amara

11
@DocBrown: ฉันเคยเขียนตัวแก้ซูโดกุที่ทำการค้นหาซ้ำที่ย้อนรอยเมื่อมันล้มเหลวในการค้นหาวิธีแก้ปัญหาในความพยายามในปัจจุบันและลองอีกครั้งด้วยค่าที่ต่างกัน และเมื่อพบวิธีแก้ไขปัญหาจะส่งข้อยกเว้นที่มีโซลูชันนั้น ความล้มเหลวของปัญหาที่นี่คือสถานการณ์ "ปกติ" และความสำเร็จคือสถานการณ์ "พิเศษ" และเนื่องจากมีหลายจุดในตัวแก้ปัญหาที่เรียกตัวเองโดยไม่มีข้อยกเว้นคุณจะต้องเขียนเทมเพลตจำนวนมากเพื่อตรวจสอบว่าการโทรกลับมาจากการค้นหาที่ประสบความสำเร็จหรือจากการค้นหาที่ล้มเหลว
โกหก Ryan

5
@ เหยี่ยว: ใช่คุณสามารถส่งคืนค่า 'เสร็จสิ้น' ซึ่งหมายถึงทุกครั้งที่คุณรับเงินคุณจะต้องทำ: for (...) { if (func() == finished) { return finished; } else { itfailedsocheckanother(); }}แต่เมื่อพิจารณาว่ามีหลายจุดในรหัสที่ func () กำลังเรียกใช้ซ้ำ วิธีการแก้ปัญหาข้อยกเว้นน้อยจะได้ค่าที่น่าประทับใจทุกครั้งที่คุณเพิ่มการสอบถามซ้ำเพิ่มเติม นั่นคือสิ่งที่ฉันเรียกว่าการเขียนโปรแกรมการขนส่งสินค้าทางศาสนามันเป็นการจำลองข้อยกเว้นเป็นภาษาที่มีอยู่แล้วเพราะผู้นำลัทธิบอกว่า "เจ้าจะไม่ใช้ข้อยกเว้น"
โกหก Ryan

8
@ เหยี่ยว: อา ... หุ้น "ดูเหมือน Goto" ข้อโต้แย้งนั้นใช้สำหรับบอกว่าคุณไม่ควรใช้ลูปหรือถ้าคำสั่งหรือการเรียกใช้ฟังก์ชั่นเพราะ "พวกเขาดูเหมือน gotos" การส่งคืนความสำเร็จด้วยข้อยกเว้นเป็นเพียง WTF หากคุณกำลังเชื่อมโยงข้อยกเว้นกับข้อผิดพลาด สำหรับฉันเมื่อใช้ในวิธีนี้บล็อก try-catch ก็เหมือนกับ "สัญญาว่าจะกลับมาที่นี่หลังจากการเดินทางอันยาวนาน" พฤติกรรมของการลอง + ยกเว้น + การโยนนั้นค่อนข้างจะคล้ายกับฟังก์ชันการโทร + ส่งกลับยกเว้นสำหรับ การเดินทางที่ยาวมากซึ่งอาจเกี่ยวข้องกับการโทรติดต่อที่ลึกมากเมื่อคุณค้นหาคำตอบเสร็จแล้ว
Lie Ryan

21

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

ในบางสภาพแวดล้อมการเขียนโปรแกรมเช่น Java Errorวัตถุพิเศษมีไว้เพื่อรายงาน "ข้อผิดพลาดจริง" สถานการณ์ที่แอปพลิเคชันที่เหมาะสมไม่ควรพยายามจัดการ วัตถุเหล่านี้ถูกส่งมอบโดยใช้กลไกเดียวกับที่ใช้สำหรับการส่งข้อยกเว้น แต่มีความหมายพิเศษของสัญญาณของสถานการณ์ที่ไม่สามารถกู้คืนได้


6

ฉันไม่มีงานวิจัยนิรุกติศาสตร์เกี่ยวกับต้นกำเนิดของสิ่งนั้น แต่ฉันเข้าใจได้ว่าการใช้คำว่า "ผิดพลาด" อาจไม่แม่นยำในทุกสถานการณ์ เช่นเดียวกับเกือบ SharepointMaster ที่กล่าวถึงจะเป็นการดีกว่าถ้าจะคิดถึงข้อผิดพลาดและข้อยกเว้นที่ถูกโยนเป็นเอนทิตีที่แยกจากกัน

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

ครั้งแรกที่ฉันเห็นคำว่า "ข้อยกเว้น" อยู่ในคู่มือการประกอบ 80386 ฉันจำได้ว่าเมื่อฉันเห็นมันดูเป็นธรรมชาติสำหรับฉันทันที เมื่อต้องการเรียกว่าข้อผิดพลาดจะไม่ถูกต้องเนื่องจากไม่มีข้อผิดพลาดในแอสเซมบลี มีเงื่อนไขเพียงอย่างเดียวที่โปรเซสเซอร์ไม่สามารถจัดการได้ (ถ้านั่นเป็นข้อผิดพลาด - จากโปรแกรมเมอร์ผู้ใช้หรือระบบ - ดีโปรเซสเซอร์นั้นไม่เชื่อเรื่องพระเจ้าอย่างสมบูรณ์) ฉันไม่รู้ว่า Intel กำเนิดคำจริงๆหรือไม่ แต่อาจจะ ...


3

Commonly Exception ใช้เพื่อตั้งชื่อเหตุการณ์ที่ไม่ถูกต้อง แต่สามารถกู้คืนได้เช่นout_of_rangeข้อยกเว้นใน C ++ ซึ่งถูกโยนทิ้งเมื่อเข้าถึงองค์ประกอบในเวกเตอร์หรืออาร์เรย์ที่ไม่มีอยู่ เห็นได้ชัดว่าเหตุการณ์ดังกล่าวไม่ถูกต้อง แต่มันเกิดขึ้นไม่ควรหมายความว่าโปรแกรมทั้งหมดของคุณขัดข้อง

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


3

ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับ "วิวัฒนาการ" ของการจัดการข้อผิดพลาดมากกว่า ด้วยภาษา C / C ++ (ก่อนเพิ่มการจัดการข้อยกเว้น) หากฟังก์ชั่นล้มเหลววิธีเดียวที่จะบอกได้ก็คือการส่งคืนค่า (เช่นHRESULTใน win32) ดังนั้นโดยทั่วไปแล้วคุณจะจับรหัสทางออกของการเรียกใช้ฟังก์ชันแต่ละครั้งและตรวจสอบ วิธีการนี้ทำให้ผู้ส่งรหัสยุ่งเหยิง และหลายครั้งนักพัฒนาจะหลีกเลี่ยงการเพิ่มการตรวจสอบเหล่านี้ออกจากความเกียจคร้าน

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


2

ใน Python พวกมันถูกตั้งชื่อว่า ABCError เช่น: KeyError, IndexError

http://docs.python.org/library/exceptions.html

ดังนั้นฉันคิดว่ามันขึ้นอยู่กับภาษาที่คุณใช้


4
อย่าลืม VB (คลาสสิกไม่ใช่สุทธิ) เมื่อใช้ Error Goto และสิ่งประดิษฐ์ที่น่าทึ่งที่สุดตลอดกาล "On Error Resume Next"
Kibbee

1
ใน Python ข้อผิดพลาดเป็นชุดย่อยของข้อยกเว้น มีข้อยกเว้นมาตรฐานสี่ข้อที่สืบทอดมาจากข้อยกเว้น แต่ไม่สืบทอดจาก StandardError: StopIteration, GeneratorExit, KeyboardInterrupt และ SystemExit
Dirk Holsopple

1

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

ข้อผิดพลาด thows ข้อยกเว้นที่รายละเอียดข้อผิดพลาดดังนั้นไม่ใช่ทุกอย่างที่เป็นข้อผิดพลาดที่เป็นข้อยกเว้นหากที่ทำให้รู้สึก;) ตัวอย่างเช่นไม่มีความเข้าใจผิดที่ไม่ควรเป็นข้อผิดพลาด แต่ thows ข้อยกเว้น

http://msdn.microsoft.com/en-us/library/system.exception.aspx


0

ในการเขียนโปรแกรม iOS / Mac เรามีทั้งข้อยกเว้นและข้อผิดพลาดในภาษาเดียว

อย่างน้อยในสภาพแวดล้อมนั้นข้อยกเว้นคือ "ไม่สามารถกู้คืนได้" ในขณะที่ข้อผิดพลาดคือ "กู้คืนได้"

ตัวอย่างเช่น:

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

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


2
มันแตกต่างอย่างสิ้นเชิงจากข้อยกเว้นและข้อผิดพลาดที่มีความหมายต่อนักพัฒนาคนอื่น ๆ !
Tarik

ฉันเดาว่าทุกภาษาแตกต่างกัน Objective-C / Cocoa เป็นหนึ่งในภาษาที่เก่าแก่ที่สุดในการใช้งาน (จากประมาณปี 1983) ดังนั้นบางทีมันอาจจะล้าสมัยไปบ้าง ถึงกระนั้นถ้าคำจำกัดความเปลี่ยนจากชุมชนหนึ่งเป็นชุมชนอื่นสิ่งสำคัญคือต้องรู้ว่า
Abhi Beckert

0

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

  • ไม่มีสิ่งใดที่บังคับให้โปรแกรมเมอร์จัดการข้อผิดพลาดโดยเพิ่มข้อยกเว้นและ
  • ไม่มีสิ่งใดที่บังคับให้โปรแกรมเมอร์เพิ่มข้อยกเว้นเฉพาะในกรณีที่เกิดข้อผิดพลาด

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

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


0

ข้อยกเว้นและข้อผิดพลาดจะแตกต่างกัน

ข้อยกเว้นคือสถานการณ์ที่โปรแกรมสามารถเอาชนะได้เช่นว่าคุณพยายามเปิดไฟล์และไม่มีอยู่ในขณะที่ข้อผิดพลาดคือสถานการณ์ที่โปรแกรมไม่สามารถทำอะไรได้เช่นดิสก์ล้มเหลวหรือ RAM ทำงานล้มเหลว


0

การเพิ่มและการจัดการข้อยกเว้นคือคุณสมบัติโฟลว์การควบคุมและชื่อของข้อยกเว้นควรเป็นไปตามการใช้งานที่ต้องการ ผู้ออกแบบโค้ดและ API ควรหารูปแบบการตั้งชื่อที่ดีและสอดคล้องกัน

ดังนั้นคำตอบสำหรับคำถามของคุณคือขึ้นอยู่กับบริบทและมุมมอง


0

ข้อยกเว้นที่พัฒนาขึ้นเป็นข้อผิดพลาดทั่วไป การเขียนโปรแกรมภาษาแรกที่จะรวมถึงกลไกการยกเว้นเป็นเสียงกระเพื่อมในช่วงต้นปี 1970 มีบทสรุปที่ดีในรูปแบบของการวิวัฒนาการทางภาษาโดย Gabriel and Steele. ข้อยกเว้น (ซึ่งยังไม่ได้เรียกว่าข้อยกเว้น) เกิดขึ้นจากความต้องการระบุพฤติกรรมของโปรแกรมหากเกิดข้อผิดพลาด ความเป็นไปได้อย่างหนึ่งคือการหยุดโปรแกรม แต่สิ่งนี้ไม่ได้มีประโยชน์เสมอไป การใช้งานเสียงกระเพื่อมแบบดั้งเดิมมีวิธีการป้อนดีบักเกอร์ในข้อผิดพลาด แต่บางครั้งโปรแกรมเมอร์ต้องการรวมการจัดการข้อผิดพลาดในโปรแกรมของพวกเขา การใช้งาน Lisp ในทศวรรษ 1960 มีวิธีที่จะพูดว่า "ทำสิ่งนี้และหากมีข้อผิดพลาดเกิดขึ้นให้ทำเช่นนั้นแทน" ข้อผิดพลาดมาจากฟังก์ชั่นดั้งเดิม แต่โปรแกรมเมอร์พบว่าสะดวกในการจงใจเรียกใช้ข้อผิดพลาดเพื่อข้ามบางส่วนของโปรแกรมและข้ามไปยังตัวจัดการข้อผิดพลาด

ในปี 1972 ในรูปแบบที่ทันสมัยในการจัดการในเสียงกระเพื่อมยกเว้นปรากฏใน MacLisp: และthrow ซอฟแวร์รักษากลุ่มแสดงรายการจำนวนมากของวัสดุในช่วงต้นการใช้งานเสียงกระเพื่อมรวมทั้งMACLISP Reference Manual Revision 0 โดยเดวิดดวงจันทร์ primitives และได้รับการบันทึกไว้ใน§5.3 p.43catchcatchthrow

catchเป็นฟังก์ชั่น LISP สำหรับการออกนอกระบบที่มีโครงสร้าง (catch x)ประเมินxและส่งกลับค่าของมันยกเว้นว่าหากในระหว่างการประเมินx (throw y)ควรได้รับการประเมินcatchผลตอบแทนได้ทันทีโดยไม่ต้องเพิ่มเติมการประเมินyx

catchอาจถูกใช้กับอาร์กิวเมนต์ econd ซึ่งไม่ได้รับการประเมินซึ่งใช้เป็นแท็กเพื่อแยกความแตกต่างระหว่างการจับแบบซ้อน ( ... )

throwถูกใช้กับcatchกลไกการออกจากที่ไม่ใช่โลคอล

(throw x)ประเมินและพ่นค่ากลับไปที่ล่าสุดxcatch

(throw x <tag>)พ่นค่าของการxกลับไปที่ล่าสุดcatchที่มีป้ายกำกับ<tag>หรือไม่มีป้ายกำกับ

ให้ความสำคัญกับnonlocalการควบคุมการไหล มันเป็นรูปแบบของการข้ามไป (เป็นโกโตะขึ้นเท่านั้น) ซึ่งจะเรียกว่ากระโดด อุปมาเป็นที่หนึ่งส่วนหนึ่งของโปรแกรมพ่นคุ้มค่าที่จะกลับไปจัดการข้อยกเว้นและข้อยกเว้นจัดการจับที่คุ้มค่าและผลตอบแทนมัน

ภาษาโปรแกรมส่วนใหญ่ในปัจจุบันบรรจุแท็กและค่าในวัตถุยกเว้นและรวมกลไกการจับกับกลไกการจัดการ

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

บางภาษาสร้างความแตกต่างระหว่างคำว่า "ผิดพลาด" และ "ยกเว้น" ตัวอย่างเช่นภาษา Lisp บางตัวมีทั้งthrowข้อยกเว้น (โฟลว์ควบคุมสำหรับผู้ใช้หมายถึงทำการออกนอกระบบในลักษณะที่ไม่ได้ระบุว่ามีอะไรผิดปกติ "" และsignalยกข้อผิดพลาด (ซึ่งบ่งชี้ว่า เกิดข้อผิดพลาดบางอย่างและอาจทำให้เกิดข้อผิดพลาด)


-1

คุณจะพบว่าตีความแตกต่างกันในการใช้ภาษาโปรแกรมที่แตกต่างกัน ในฐานะที่เป็น dasblinkenlight กล่าวว่าเป็นมุมมองของจาวาที่มีการแบ่งเขตระหว่างข้อผิดพลาดและข้อยกเว้น ในหลาย ๆ ข้อยกเว้นการเขียนโปรแกรมภาษาเป็นการละเมิดซึ่งสามารถจัดการหรือได้รับอนุญาตให้เดือดเพื่อส่งผ่านไปยังโมดูลรหัสสูงสุดที่เป็นไปได้ ข้อผิดพลาดโดยทั่วไปคือสถานการณ์ที่คอนเทนเนอร์ไทม์ของภาษาของคุณจัดการ (และหลายกรณีก็หยุดการทำงาน)


-1

ข้อผิดพลาดมักเป็นข้อผิดพลาด ข้อยกเว้นคือข้อผิดพลาดในบริบทปัจจุบัน กล่าวคือมีข้อยกเว้นตามบริบท ตัวอย่างของข้อยกเว้นจะเพิ่ม ascii "a" เป็นจำนวนเต็ม "1" ข้อผิดพลาดอาจเป็นสิ่งที่ต้องการใช้ตัวดำเนินการที่ไม่ได้กำหนดเช่น "+!" ในภาษาส่วนใหญ่

บางภาษาจะอนุญาตให้คุณกำหนดวิธีการออกจากสถานการณ์หากนั่นคือสิ่งที่คุณต้องการทำจริงๆ

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