1
0
Fork 0
cl-sites/guile.html_node/Exceptions.html
2024-12-17 12:49:28 +01:00

119 lines
5.1 KiB
HTML

<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>Exceptions (Guile Reference Manual)</title>
<meta name="description" content="Exceptions (Guile Reference Manual)">
<meta name="keywords" content="Exceptions (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Control-Mechanisms.html" rel="up" title="Control Mechanisms">
<link href="Error-Reporting.html" rel="next" title="Error Reporting">
<link href="Multiple-Values.html" rel="prev" title="Multiple Values">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsection-level-extent" id="Exceptions">
<div class="nav-panel">
<p>
Next: <a href="Error-Reporting.html" accesskey="n" rel="next">Procedures for Signaling Errors</a>, Previous: <a href="Multiple-Values.html" accesskey="p" rel="prev">Returning and Accepting Multiple Values</a>, Up: <a href="Control-Mechanisms.html" accesskey="u" rel="up">Controlling the Flow of Program Execution</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="Exceptions-1"><span>6.11.8 Exceptions<a class="copiable-link" href="#Exceptions-1"> &para;</a></span></h4>
<a class="index-entry-id" id="index-error-handling"></a>
<a class="index-entry-id" id="index-exception-handling"></a>
<p>What happens when things go wrong? Guile&rsquo;s exception facility exists to
help answer this question, allowing programs to describe the problem and
to handle the situation in a flexible way.
</p>
<p>When a program runs into a problem, such as division by zero, it will
raise an exception. Sometimes exceptions get raised by Guile on a
program&rsquo;s behalf. Sometimes a program will want to raise exceptions of
its own. Raising an exception stops the current computation and instead
invokes the current exception handler, passing it an exception object
describing the unexpected situation.
</p>
<p>Usually an exception handler will unwind the computation back to some
kind of safe point. For example, typical logic for a key press driven
application might look something like this:
</p>
<div class="example">
<pre class="example-preformatted">main-loop:
read the next key press and call dispatch-key
dispatch-key:
lookup the key in a keymap and call an appropriate procedure,
say find-file
find-file:
interactively read the required file name, then call
find-specified-file
find-specified-file:
check whether file exists; if not, raise an exception
...
</pre></div>
<p>In this case, <code class="code">main-loop</code> can install an exception handler that
would cause any exception raised inside <code class="code">dispatch-key</code> to print a
warning and jump back to the main loop.
</p>
<p>The following subsections go into more detail about exception objects,
raising exceptions, and handling exceptions. It also presents a
historical interface that was used in Guile&rsquo;s first 25 years and which
won&rsquo;t be going away any time soon.
</p>
<ul class="mini-toc">
<li><a href="Exception-Objects.html" accesskey="1">Exception Objects</a></li>
<li><a href="Raising-and-Handling-Exceptions.html" accesskey="2">Raising and Handling Exceptions</a></li>
<li><a href="Throw-and-Catch.html" accesskey="3">Throw and Catch</a></li>
<li><a href="Exceptions-and-C.html" accesskey="4">Exceptions and C</a></li>
</ul>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Error-Reporting.html">Procedures for Signaling Errors</a>, Previous: <a href="Multiple-Values.html">Returning and Accepting Multiple Values</a>, Up: <a href="Control-Mechanisms.html">Controlling the Flow of Program Execution</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>