ข้อยกเว้นที่พัฒนาขึ้นเป็นข้อผิดพลาดทั่วไป การเขียนโปรแกรมภาษาแรกที่จะรวมถึงกลไกการยกเว้นเป็นเสียงกระเพื่อมในช่วงต้นปี 1970 มีบทสรุปที่ดีในรูปแบบของการวิวัฒนาการทางภาษาโดย Gabriel and Steele. ข้อยกเว้น (ซึ่งยังไม่ได้เรียกว่าข้อยกเว้น) เกิดขึ้นจากความต้องการระบุพฤติกรรมของโปรแกรมหากเกิดข้อผิดพลาด ความเป็นไปได้อย่างหนึ่งคือการหยุดโปรแกรม แต่สิ่งนี้ไม่ได้มีประโยชน์เสมอไป การใช้งานเสียงกระเพื่อมแบบดั้งเดิมมีวิธีการป้อนดีบักเกอร์ในข้อผิดพลาด แต่บางครั้งโปรแกรมเมอร์ต้องการรวมการจัดการข้อผิดพลาดในโปรแกรมของพวกเขา การใช้งาน Lisp ในทศวรรษ 1960 มีวิธีที่จะพูดว่า "ทำสิ่งนี้และหากมีข้อผิดพลาดเกิดขึ้นให้ทำเช่นนั้นแทน" ข้อผิดพลาดมาจากฟังก์ชั่นดั้งเดิม แต่โปรแกรมเมอร์พบว่าสะดวกในการจงใจเรียกใช้ข้อผิดพลาดเพื่อข้ามบางส่วนของโปรแกรมและข้ามไปยังตัวจัดการข้อผิดพลาด
ในปี 1972 ในรูปแบบที่ทันสมัยในการจัดการในเสียงกระเพื่อมยกเว้นปรากฏใน MacLisp: และthrow
ซอฟแวร์รักษากลุ่มแสดงรายการจำนวนมากของวัสดุในช่วงต้นการใช้งานเสียงกระเพื่อมรวมทั้งMACLISP Reference Manual Revision 0 โดยเดวิดดวงจันทร์ primitives และได้รับการบันทึกไว้ใน§5.3 p.43catch
catch
throw
catch
เป็นฟังก์ชั่น LISP สำหรับการออกนอกระบบที่มีโครงสร้าง (catch x)
ประเมินx
และส่งกลับค่าของมันยกเว้นว่าหากในระหว่างการประเมินx
(throw y)
ควรได้รับการประเมินcatch
ผลตอบแทนได้ทันทีโดยไม่ต้องเพิ่มเติมการประเมินy
x
catch
อาจถูกใช้กับอาร์กิวเมนต์ econd ซึ่งไม่ได้รับการประเมินซึ่งใช้เป็นแท็กเพื่อแยกความแตกต่างระหว่างการจับแบบซ้อน ( ... )
throw
ถูกใช้กับcatch
กลไกการออกจากที่ไม่ใช่โลคอล
(throw x)
ประเมินและพ่นค่ากลับไปที่ล่าสุดx
catch
(throw x <tag>)
พ่นค่าของการx
กลับไปที่ล่าสุดcatch
ที่มีป้ายกำกับ<tag>
หรือไม่มีป้ายกำกับ
ให้ความสำคัญกับnonlocalการควบคุมการไหล มันเป็นรูปแบบของการข้ามไป (เป็นโกโตะขึ้นเท่านั้น) ซึ่งจะเรียกว่ากระโดด อุปมาเป็นที่หนึ่งส่วนหนึ่งของโปรแกรมพ่นคุ้มค่าที่จะกลับไปจัดการข้อยกเว้นและข้อยกเว้นจัดการจับที่คุ้มค่าและผลตอบแทนมัน
ภาษาโปรแกรมส่วนใหญ่ในปัจจุบันบรรจุแท็กและค่าในวัตถุยกเว้นและรวมกลไกการจับกับกลไกการจัดการ
ข้อยกเว้นไม่จำเป็นต้องมีข้อผิดพลาด พวกเขาเป็นวิธีที่จะออกจากบล็อกของรหัสและจากบล็อกโดยรอบหนีจนกว่าจะถึงตัวจัดการข้อยกเว้น ไม่ว่าสิ่งนั้นจะถูกพิจารณาว่าเป็น "ข้อผิดพลาด" ในแง่ที่เป็นธรรมชาติหรือไม่
บางภาษาสร้างความแตกต่างระหว่างคำว่า "ผิดพลาด" และ "ยกเว้น" ตัวอย่างเช่นภาษา Lisp บางตัวมีทั้งthrow
ข้อยกเว้น (โฟลว์ควบคุมสำหรับผู้ใช้หมายถึงทำการออกนอกระบบในลักษณะที่ไม่ได้ระบุว่ามีอะไรผิดปกติ "" และsignal
ยกข้อผิดพลาด (ซึ่งบ่งชี้ว่า เกิดข้อผิดพลาดบางอย่างและอาจทำให้เกิดข้อผิดพลาด)