summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorVarriount <Varriount@users.noreply.github.com>2015-01-16 21:47:32 -0500
committerVarriount <Varriount@users.noreply.github.com>2015-01-16 21:47:32 -0500
commit1a76d26360fc6e19b73a0d0b03d0c0b059587c6f (patch)
tree4a5d1e42098d57df2e8e4d8e74dfbc6c7172294c
parentb828bae80d5450a3bef97840ee14517f436485c1 (diff)
parent0f65c23a0be43085501e9b834f96e0c9035e67ee (diff)
downloadNim-1a76d26360fc6e19b73a0d0b03d0c0b059587c6f.tar.gz
Merge pull request #1954 from ziotom78/devel
New section "Except clauses" in the manual
-rw-r--r--doc/manual/exceptions.txt35
1 files changed, 35 insertions, 0 deletions
diff --git a/doc/manual/exceptions.txt b/doc/manual/exceptions.txt
index e40742e0a..f18ab5635 100644
--- a/doc/manual/exceptions.txt
+++ b/doc/manual/exceptions.txt
@@ -67,6 +67,41 @@ follows a ``(`` it has to be written as a one liner:
   let x = (try: parseInt("133a") except: -1)
 
 
+Except clauses
+--------------
+
+Within an ``except`` clause, it is possible to use
+``getCurrentException`` to retrieve the exception that has been
+raised:
+
+.. code-block:: nim
+  try:
+    # ...
+  except IOError:
+    let e = getCurrentException()
+    # Now use "e"
+
+Note that ``getCurrentException`` always returns a ``ref Exception``
+type. If a variable of the proper type is needed (in the example
+above, ``IOError``), one must use an explicit cast:
+
+.. code-block:: nim
+  try:
+    # ...
+  except IOError:
+    let e = (ref IOError)(getCurrentException())
+    # "e" is now of the proper type
+
+However, this is seldom needed. The most common case is to extract an
+error message from ``e``, and for such situations it is enough to use
+``getCurrentExceptionMsg``:
+
+.. code-block:: nim
+  try:
+    # ...
+  except IOError:
+    echo "I/O error: " & getCurrentExceptionMsg()
+
 
 Defer statement
 ---------------