Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / html / python / lib / doctest-exceptions.html
CommitLineData
920dae64
AT
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<html>
3<head>
4<link rel="STYLESHEET" href="lib.css" type='text/css' />
5<link rel="SHORTCUT ICON" href="../icons/pyfav.png" type="image/png" />
6<link rel='start' href='../index.html' title='Python Documentation Index' />
7<link rel="first" href="lib.html" title='Python Library Reference' />
8<link rel='contents' href='contents.html' title="Contents" />
9<link rel='index' href='genindex.html' title='Index' />
10<link rel='last' href='about.html' title='About this document...' />
11<link rel='help' href='about.html' title='About this document...' />
12<link rel="next" href="doctest-options.html" />
13<link rel="prev" href="doctest-execution-context.html" />
14<link rel="parent" href="doctest-how-it-works.html" />
15<link rel="next" href="doctest-options.html" />
16<meta name='aesop' content='information' />
17<title>5.2.3.4 What About Exceptions?</title>
18</head>
19<body>
20<DIV CLASS="navigation">
21<div id='top-navigation-panel' xml:id='top-navigation-panel'>
22<table align="center" width="100%" cellpadding="0" cellspacing="2">
23<tr>
24<td class='online-navigation'><a rel="prev" title="5.2.3.3 What's the Execution"
25 href="doctest-execution-context.html"><img src='../icons/previous.png'
26 border='0' height='32' alt='Previous Page' width='32' /></A></td>
27<td class='online-navigation'><a rel="parent" title="5.2.3 How It Works"
28 href="doctest-how-it-works.html"><img src='../icons/up.png'
29 border='0' height='32' alt='Up One Level' width='32' /></A></td>
30<td class='online-navigation'><a rel="next" title="5.2.3.5 Option Flags and"
31 href="doctest-options.html"><img src='../icons/next.png'
32 border='0' height='32' alt='Next Page' width='32' /></A></td>
33<td align="center" width="100%">Python Library Reference</td>
34<td class='online-navigation'><a rel="contents" title="Table of Contents"
35 href="contents.html"><img src='../icons/contents.png'
36 border='0' height='32' alt='Contents' width='32' /></A></td>
37<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
38 border='0' height='32' alt='Module Index' width='32' /></a></td>
39<td class='online-navigation'><a rel="index" title="Index"
40 href="genindex.html"><img src='../icons/index.png'
41 border='0' height='32' alt='Index' width='32' /></A></td>
42</tr></table>
43<div class='online-navigation'>
44<b class="navlabel">Previous:</b>
45<a class="sectref" rel="prev" href="doctest-execution-context.html">5.2.3.3 What's the Execution</A>
46<b class="navlabel">Up:</b>
47<a class="sectref" rel="parent" href="doctest-how-it-works.html">5.2.3 How It Works</A>
48<b class="navlabel">Next:</b>
49<a class="sectref" rel="next" href="doctest-options.html">5.2.3.5 Option Flags and</A>
50</div>
51<hr /></div>
52</DIV>
53<!--End of Navigation Panel-->
54
55<H3><A NAME="SECTION007234000000000000000"></A><A NAME="doctest-exceptions"></A>
56<BR>
575.2.3.4 What About Exceptions?
58</H3>
59
60<P>
61No problem, provided that the traceback is the only output produced by
62the example: just paste in the traceback. Since tracebacks contain
63details that are likely to change rapidly (for example, exact file paths
64and line numbers), this is one case where doctest works hard to be
65flexible in what it accepts.
66
67<P>
68Simple example:
69
70<P>
71<div class="verbatim"><pre>
72&gt;&gt;&gt; [1, 2, 3].remove(42)
73Traceback (most recent call last):
74 File "&lt;stdin&gt;", line 1, in ?
75ValueError: list.remove(x): x not in list
76</pre></div>
77
78<P>
79That doctest succeeds if <tt class="exception">ValueError</tt> is raised, with the
80"<tt class="samp">list.remove(x): x not in list</tt>" detail as shown.
81
82<P>
83The expected output for an exception must start with a traceback
84header, which may be either of the following two lines, indented the
85same as the first line of the example:
86
87<P>
88<div class="verbatim"><pre>
89Traceback (most recent call last):
90Traceback (innermost last):
91</pre></div>
92
93<P>
94The traceback header is followed by an optional traceback stack, whose
95contents are ignored by doctest. The traceback stack is typically
96omitted, or copied verbatim from an interactive session.
97
98<P>
99The traceback stack is followed by the most interesting part: the
100line(s) containing the exception type and detail. This is usually the
101last line of a traceback, but can extend across multiple lines if the
102exception has a multi-line detail:
103
104<P>
105<div class="verbatim"><pre>
106&gt;&gt;&gt; raise ValueError('multi\n line\ndetail')
107Traceback (most recent call last):
108 File "&lt;stdin&gt;", line 1, in ?
109ValueError: multi
110 line
111detail
112</pre></div>
113
114<P>
115The last three lines (starting with <tt class="exception">ValueError</tt>) are
116compared against the exception's type and detail, and the rest are
117ignored.
118
119<P>
120Best practice is to omit the traceback stack, unless it adds
121significant documentation value to the example. So the last example
122is probably better as:
123
124<P>
125<div class="verbatim"><pre>
126&gt;&gt;&gt; raise ValueError('multi\n line\ndetail')
127Traceback (most recent call last):
128 ...
129ValueError: multi
130 line
131detail
132</pre></div>
133
134<P>
135Note that tracebacks are treated very specially. In particular, in the
136rewritten example, the use of "<tt class="samp">...</tt>" is independent of doctest's
137<tt class="constant">ELLIPSIS</tt> option. The ellipsis in that example could be left
138out, or could just as well be three (or three hundred) commas or digits,
139or an indented transcript of a Monty Python skit.
140
141<P>
142Some details you should read once, but won't need to remember:
143
144<P>
145
146<UL>
147<LI>Doctest can't guess whether your expected output came from an
148 exception traceback or from ordinary printing. So, e.g., an example
149 that expects "<tt class="samp">ValueError: 42 is prime</tt>" will pass whether
150 <tt class="exception">ValueError</tt> is actually raised or if the example merely
151 prints that traceback text. In practice, ordinary output rarely begins
152 with a traceback header line, so this doesn't create real problems.
153
154<P>
155</LI>
156<LI>Each line of the traceback stack (if present) must be indented
157 further than the first line of the example, <em>or</em> start with a
158 non-alphanumeric character. The first line following the traceback
159 header indented the same and starting with an alphanumeric is taken
160 to be the start of the exception detail. Of course this does the
161 right thing for genuine tracebacks.
162
163<P>
164</LI>
165<LI>When the <tt class="constant">IGNORE_EXCEPTION_DETAIL</tt> doctest option is
166 is specified, everything following the leftmost colon is ignored.
167
168<P>
169</LI>
170<LI>The interactive shell omits the traceback header line for some
171 <tt class="exception">SyntaxError</tt>s. But doctest uses the traceback header
172 line to distinguish exceptions from non-exceptions. So in the rare
173 case where you need to test a <tt class="exception">SyntaxError</tt> that omits the
174 traceback header, you will need to manually add the traceback header
175 line to your test example.
176
177<P>
178</LI>
179<LI>For some <tt class="exception">SyntaxError</tt>s, Python displays the character
180 position of the syntax error, using a <code>^</code> marker:
181
182<P>
183<div class="verbatim"><pre>
184&gt;&gt;&gt; 1 1
185 File "&lt;stdin&gt;", line 1
186 1 1
187 ^
188SyntaxError: invalid syntax
189</pre></div>
190
191<P>
192Since the lines showing the position of the error come before the
193 exception type and detail, they are not checked by doctest. For
194 example, the following test would pass, even though it puts the
195 <code>^</code> marker in the wrong location:
196
197<P>
198<div class="verbatim"><pre>
199&gt;&gt;&gt; 1 1
200Traceback (most recent call last):
201 File "&lt;stdin&gt;", line 1
202 1 1
203 ^
204SyntaxError: invalid syntax
205</pre></div>
206
207<P>
208</LI>
209</UL>
210
211<P>
212
213<span class="versionnote">Changed in version 2.4:
214The ability to handle a multi-line exception detail,
215 and the <tt class="constant">IGNORE_EXCEPTION_DETAIL</tt> doctest option,
216 were added.</span>
217
218<P>
219
220<DIV CLASS="navigation">
221<div class='online-navigation'>
222<p></p><hr />
223<table align="center" width="100%" cellpadding="0" cellspacing="2">
224<tr>
225<td class='online-navigation'><a rel="prev" title="5.2.3.3 What's the Execution"
226 href="doctest-execution-context.html"><img src='../icons/previous.png'
227 border='0' height='32' alt='Previous Page' width='32' /></A></td>
228<td class='online-navigation'><a rel="parent" title="5.2.3 How It Works"
229 href="doctest-how-it-works.html"><img src='../icons/up.png'
230 border='0' height='32' alt='Up One Level' width='32' /></A></td>
231<td class='online-navigation'><a rel="next" title="5.2.3.5 Option Flags and"
232 href="doctest-options.html"><img src='../icons/next.png'
233 border='0' height='32' alt='Next Page' width='32' /></A></td>
234<td align="center" width="100%">Python Library Reference</td>
235<td class='online-navigation'><a rel="contents" title="Table of Contents"
236 href="contents.html"><img src='../icons/contents.png'
237 border='0' height='32' alt='Contents' width='32' /></A></td>
238<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
239 border='0' height='32' alt='Module Index' width='32' /></a></td>
240<td class='online-navigation'><a rel="index" title="Index"
241 href="genindex.html"><img src='../icons/index.png'
242 border='0' height='32' alt='Index' width='32' /></A></td>
243</tr></table>
244<div class='online-navigation'>
245<b class="navlabel">Previous:</b>
246<a class="sectref" rel="prev" href="doctest-execution-context.html">5.2.3.3 What's the Execution</A>
247<b class="navlabel">Up:</b>
248<a class="sectref" rel="parent" href="doctest-how-it-works.html">5.2.3 How It Works</A>
249<b class="navlabel">Next:</b>
250<a class="sectref" rel="next" href="doctest-options.html">5.2.3.5 Option Flags and</A>
251</div>
252</div>
253<hr />
254<span class="release-info">Release 2.4.2, documentation updated on 28 September 2005.</span>
255</DIV>
256<!--End of Navigation Panel-->
257<ADDRESS>
258See <i><a href="about.html">About this document...</a></i> for information on suggesting changes.
259</ADDRESS>
260</BODY>
261</HTML>