mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Described some more standard types and statements.
This commit is contained in:
parent
3bead0984c
commit
255ad6e659
2 changed files with 610 additions and 62 deletions
336
Doc/ref.tex
336
Doc/ref.tex
|
@ -3,8 +3,7 @@
|
||||||
\documentstyle[11pt,myformat]{report}
|
\documentstyle[11pt,myformat]{report}
|
||||||
|
|
||||||
\title{\bf
|
\title{\bf
|
||||||
Python Reference Manual \\
|
Python Reference Manual
|
||||||
{\em Incomplete Draft}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
\author{
|
\author{
|
||||||
|
@ -88,11 +87,6 @@ standard modules. These are not documented here, but in the separate
|
||||||
mentioned when they interact in a significant way with the language
|
mentioned when they interact in a significant way with the language
|
||||||
definition.
|
definition.
|
||||||
|
|
||||||
\section{Warning}
|
|
||||||
|
|
||||||
This version of the manual is incomplete. Sections that still need to
|
|
||||||
be written or need considerable work are marked with ``XXX''.
|
|
||||||
|
|
||||||
\section{Notation}
|
\section{Notation}
|
||||||
|
|
||||||
The descriptions of lexical analysis and syntax use a modified BNF
|
The descriptions of lexical analysis and syntax use a modified BNF
|
||||||
|
@ -648,29 +642,83 @@ not contain null bytes.)
|
||||||
\end{description} % Mapping types
|
\end{description} % Mapping types
|
||||||
|
|
||||||
\item[Callable types]
|
\item[Callable types]
|
||||||
These are the types to which the function call operation can be applied:
|
These are the types to which the function call operation (written as
|
||||||
|
\verb\function(argument, argument, ...)\) can be applied:
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item[User-defined functions]
|
\item[User-defined functions]
|
||||||
XXX
|
A user-defined function is created by a function definition (starting
|
||||||
\item[Built-in functions]
|
with the \verb\def\ keyword). It should be called with an argument
|
||||||
XXX
|
list containing the same number of items as the function's
|
||||||
|
formal parameter list.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\func_code\ is the code object
|
||||||
|
representing the compiled function body, and \verb\func_globals\ is (a
|
||||||
|
reference to) the dictionary that holds the function's global
|
||||||
|
variables -- it implements the global name space of the module in
|
||||||
|
which the function was defined.
|
||||||
|
|
||||||
\item[User-defined methods]
|
\item[User-defined methods]
|
||||||
XXX
|
A user-defined method (a.k.a. {\tt object closure}) is a pair of a
|
||||||
|
class instance object and a user-defined function. It should be
|
||||||
|
called with an argument list containing one item less than the number
|
||||||
|
of items in the function's formal parameter list. When called, the
|
||||||
|
class instance becomes the first argument, and the call arguments are
|
||||||
|
shifted one to the right.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\im_self\ is the class instance
|
||||||
|
object, \verb\im_func\ is the function object.
|
||||||
|
|
||||||
|
\item[Built-in functions]
|
||||||
|
A built-in function object is a wrapper around a C function. Examples
|
||||||
|
of built-in functions are \verb\len\ and \verb\math.sin\. There
|
||||||
|
are no special attributes. The number and type of the arguments are
|
||||||
|
determined by the C function.
|
||||||
|
|
||||||
\item[Built-in methods]
|
\item[Built-in methods]
|
||||||
XXX
|
This is really a different disguise of a built-in function, this time
|
||||||
\item[User-defined classes]
|
containing an object passed to the C function as an implicit extra
|
||||||
XXX
|
argument. An example of a built-in method is \verb\list.append\ if
|
||||||
|
\verb\list\ is a list object.
|
||||||
|
|
||||||
|
\item[Classes]
|
||||||
|
Class objects are described below. When a class object is called as a
|
||||||
|
parameterless function, a new class instance (also described below) is
|
||||||
|
created and returned. The class's initialization function is not
|
||||||
|
called -- this is the responsibility of the caller. It is illegal to
|
||||||
|
call a class object with one or more arguments.
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
\item[Modules]
|
\item[Modules]
|
||||||
|
A module object is a container for a module's name space, which is a
|
||||||
|
dictionary (the same dictionary as referenced by the
|
||||||
|
\ver\func_globals\ attribute of functions defined in the module).
|
||||||
|
Module attribute references are translated to lookups in this
|
||||||
|
dictionary. A module object does not contain the code object used to
|
||||||
|
initialize the module (since it isn't needed once the initialization
|
||||||
|
is done).
|
||||||
|
|
||||||
|
There are two special read-only attributes: \verb\__dict__\ yields the
|
||||||
|
module's name space as a dictionary object; \verb\__name__\ yields the
|
||||||
|
module's name.
|
||||||
|
|
||||||
|
\item[Classes]
|
||||||
XXX
|
XXX
|
||||||
|
|
||||||
\item[Class instances]
|
\item[Class instances]
|
||||||
XXX
|
XXX
|
||||||
|
|
||||||
\item[Files]
|
\item[Files]
|
||||||
XXX
|
A file object represents an open file. (It is a wrapper around a C
|
||||||
|
{\tt stdio} file pointer.) File objects are created by the
|
||||||
|
\verb\open()\ built-in function, and also by \verb\posix.popen()\ and
|
||||||
|
the \verb\makefile\ method of socket objects. \verb\sys.stdin\,
|
||||||
|
\verb\sys.stdout\ and \verb\sys.stderr\ are file objects corresponding
|
||||||
|
the the interpreter's standard input, output and error streams.
|
||||||
|
See the Python Library Reference for methods of file objects and other
|
||||||
|
details.
|
||||||
|
|
||||||
\item[Internal types]
|
\item[Internal types]
|
||||||
A few types used internally by the interpreter are exposed to the user.
|
A few types used internally by the interpreter are exposed to the user.
|
||||||
|
@ -678,10 +726,57 @@ Their definition may change with future versions of the interpreter,
|
||||||
but they are mentioned here for completeness.
|
but they are mentioned here for completeness.
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item[Code objects]
|
\item[Code objects]
|
||||||
XXX
|
Code objects represent executable code. The difference between a code
|
||||||
|
object and a function object is that the function object contains an
|
||||||
|
explicit reference to the function's context (the module in which it
|
||||||
|
was defined) which a code object contains no context. There is no way
|
||||||
|
to execute a bare code object.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\co_code\ is a string representing
|
||||||
|
the sequence of instructions; \verb\co_consts\ is a list of literals
|
||||||
|
used by the code; \verb\co_names\ is a list of names (strings) used by
|
||||||
|
the code; \verb\co_filename\ is the filename from which the code was
|
||||||
|
compiled. (To find out the line numbers, you would have to decode the
|
||||||
|
instructions; the standard library module \verb\dis\ contains an
|
||||||
|
example of how to do this.)
|
||||||
|
|
||||||
|
\item[Frame objects]
|
||||||
|
Frame objects represent execution frames. They may occur in traceback
|
||||||
|
objects (see below).
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\f_back\ is to the previous
|
||||||
|
stack frame (towards the caller), or \verb\None\ if this is the bottom
|
||||||
|
stack frame; \verb\f_code\ is the code object being executed in this
|
||||||
|
frame; \verb\f_globals\ is the dictionary used to look up global
|
||||||
|
variables; \verb\f_locals\ is used for local variables;
|
||||||
|
\verb\f_lineno\ gives the line number and \verb\f_lasti\ gives the
|
||||||
|
precise instruction (this is an index into the instruction string of
|
||||||
|
the code object).
|
||||||
|
|
||||||
\item[Traceback objects]
|
\item[Traceback objects]
|
||||||
XXX
|
Traceback objects represent a stack trace of an exception. A
|
||||||
|
traceback object is created when an exception occurs. When the search
|
||||||
|
for an exception handler unwinds the execution stack, at each unwound
|
||||||
|
level a traceback object is inserted in front of the current
|
||||||
|
traceback. When an exception handler is entered, the stack trace is
|
||||||
|
made available to the program as \verb\sys.exc_traceback\. When the
|
||||||
|
program contains no suitable handler, the stack trace is written
|
||||||
|
(nicely formatted) to the standard error stream; if the interpreter is
|
||||||
|
interactive, it is made available to the user as
|
||||||
|
\verb\sys.last_traceback\.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\tb_next\ is the next level in the
|
||||||
|
stack trace (towards the frame where the exception occurred), or
|
||||||
|
\verb\None\ if there is no next level; \verb\tb_frame\ points to the
|
||||||
|
execution frame of the current level; \verb\tb_lineno\ gives the line
|
||||||
|
number where the exception occurred; \verb\tb_lasti\ indicates the
|
||||||
|
precise instruction. The line number and last instruction in the
|
||||||
|
traceback may differ from the line number of its frame object if the
|
||||||
|
exception occurred in a \verb\try\ statement with no matching
|
||||||
|
\verb\except\ clause or with a \verb\finally\ clause.
|
||||||
|
|
||||||
\end{description} % Internal types
|
\end{description} % Internal types
|
||||||
|
|
||||||
\end{description} % Types
|
\end{description} % Types
|
||||||
|
@ -1120,8 +1215,8 @@ Mappings (dictionaries) are compared through lexicographic
|
||||||
comparison of their sorted (key, value) lists.%
|
comparison of their sorted (key, value) lists.%
|
||||||
\footnote{This is expensive since it requires sorting the keys first,
|
\footnote{This is expensive since it requires sorting the keys first,
|
||||||
but about the only sensible definition. It was tried to compare
|
but about the only sensible definition. It was tried to compare
|
||||||
dictionaries using the following rules, but this gave surprises in
|
dictionaries using the rule below for most other types, but this gave
|
||||||
cases like \verb|if d == {}: ...|.}
|
surprises in cases like \verb|if d == {}: ...|.}
|
||||||
|
|
||||||
\item
|
\item
|
||||||
Most other types compare unequal unless they are the same object;
|
Most other types compare unequal unless they are the same object;
|
||||||
|
@ -1209,7 +1304,6 @@ Several simple statements may occur on a single line separated
|
||||||
by semicolons. The syntax for simple statements is:
|
by semicolons. The syntax for simple statements is:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
stmt_list: simple_stmt (";" simple_stmt)* [";"]
|
|
||||||
simple_stmt: expression_stmt
|
simple_stmt: expression_stmt
|
||||||
| assignment
|
| assignment
|
||||||
| pass_stmt
|
| pass_stmt
|
||||||
|
@ -1503,8 +1597,10 @@ import_stmt: "import" identifier ("," identifier)*
|
||||||
|
|
||||||
Import statements are executed in two steps: (1) find a module, and
|
Import statements are executed in two steps: (1) find a module, and
|
||||||
initialize it if necessary; (2) define a name or names in the local
|
initialize it if necessary; (2) define a name or names in the local
|
||||||
name space. The first form (without \verb\from\) repeats these steps
|
name space (of the scope where the \verb\import\ statement occurs).
|
||||||
for each identifier in the list.
|
The first form (without \verb\from\) repeats these steps for each
|
||||||
|
identifier in the list, the \verb\from\ form performs them once, with
|
||||||
|
the first identifier specifying the module name.
|
||||||
|
|
||||||
The system maintains a table of modules that have been initialized,
|
The system maintains a table of modules that have been initialized,
|
||||||
indexed by module name. (The current implementation makes this table
|
indexed by module name. (The current implementation makes this table
|
||||||
|
@ -1520,8 +1616,35 @@ path; it is initialized from the shell environment variable
|
||||||
|
|
||||||
If a built-in module is found, its built-in initialization code is
|
If a built-in module is found, its built-in initialization code is
|
||||||
executed and step (1) is finished. If no matching file is found,
|
executed and step (1) is finished. If no matching file is found,
|
||||||
\verb\ImportError\ is raised (and step (2) is never started). If a file is
|
\verb\ImportError\ is raised. If a file is found, it is parsed,
|
||||||
found, it is parsed. If a syntax error occurs, HIRO
|
yielding an executable code block. If a syntax error occurs,
|
||||||
|
\verb\SyntaxError\ is raised. Otherwise, an empty module of the given
|
||||||
|
name is created and inserted in the module table, and then the code
|
||||||
|
block is executed in the context of this module. Exceptions during
|
||||||
|
this execution terminate step (1).
|
||||||
|
|
||||||
|
When step (1) finishes without raising an exception, step (2) can
|
||||||
|
begin.
|
||||||
|
|
||||||
|
The first form of \verb\import\ statement binds the module name in the
|
||||||
|
local name space to the module object, and then goes on to import the
|
||||||
|
next identifier, if any. The \verb\from\ from does not bind the
|
||||||
|
module name: it goes through the list of identifiers, looks each one
|
||||||
|
of them up in the module found in step (1), and binds the name in the
|
||||||
|
local name space to the object thus found. If a name is not found,
|
||||||
|
\verb\ImportError\ is raised. If the list of identifiers is replaced
|
||||||
|
by a star (\verb\*\), all names defined in the module are bound,
|
||||||
|
except those beginning with an underscore(\verb\_\).
|
||||||
|
|
||||||
|
Names bound by import statements may not occur in \verb\global\
|
||||||
|
statements in the same scope.
|
||||||
|
|
||||||
|
The \verb\from\ form with \verb\*\ may only occur in a module scope.
|
||||||
|
|
||||||
|
(The current implementation does not enforce the latter two
|
||||||
|
restrictions, but programs should not abuse this freedom, as future
|
||||||
|
implementations may enforce them or silently change the meaning of the
|
||||||
|
program.)
|
||||||
|
|
||||||
\section{The {\tt global} statement}
|
\section{The {\tt global} statement}
|
||||||
|
|
||||||
|
@ -1529,47 +1652,198 @@ found, it is parsed. If a syntax error occurs, HIRO
|
||||||
global_stmt: "global" identifier ("," identifier)*
|
global_stmt: "global" identifier ("," identifier)*
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
(XXX To be done.)
|
The \verb\global\ statement is a declaration which holds for the
|
||||||
|
entire current scope. It means that the listed identifiers are to be
|
||||||
|
interpreted as globals. While {\em using} global names is automatic
|
||||||
|
if they are not defined in the local scope, {\em assigning} to global
|
||||||
|
names would be impossible without \verb\global\.
|
||||||
|
|
||||||
|
Names listed in a \verb\global\ statement must not be used in the same
|
||||||
|
scope before that \verb\global\ statement is executed.
|
||||||
|
|
||||||
|
Name listed in a \verb\global\ statement must not be defined as formal
|
||||||
|
parameters or in a \verb\for\ loop control target, \verb\class\
|
||||||
|
definition, function definition, or \verb\import\ statement.
|
||||||
|
|
||||||
|
(The current implementation does not enforce the latter two
|
||||||
|
restrictions, but programs should not abuse this freedom, as future
|
||||||
|
implementations may enforce them or silently change the meaning of the
|
||||||
|
program.)
|
||||||
|
|
||||||
\chapter{Compound statements}
|
\chapter{Compound statements}
|
||||||
|
|
||||||
(XXX The semantic definitions of this chapter are still to be done.)
|
Compound statements contain (groups of) other statements; they affect
|
||||||
|
or control the execution of those other statements in some way.
|
||||||
|
|
||||||
|
The \verb\if\, \verb\while\ and \verb\for\ statements implement
|
||||||
|
traditional control flow constructs. \verb\try\ specifies exception
|
||||||
|
handlers and/or cleanup code for a group of statements. Function and
|
||||||
|
class definitions are also syntactically compound statements.
|
||||||
|
|
||||||
|
Compound statements consist of one or more `clauses'. A clause
|
||||||
|
consists of a header and a `suite'. The clause headers of a
|
||||||
|
particular compound statement are all at the same indentation level;
|
||||||
|
all clauses begin with a uniquely identifying keyword and end with a
|
||||||
|
colon. A suite is a group of statements controlled by a clause. A
|
||||||
|
suite can be a bunch of semicolon-separated simple statements on the
|
||||||
|
same line as the header, following the colon, or it can be a list of
|
||||||
|
indented statements. Only the latter form of suite can contain nested
|
||||||
|
compound statements; the following is illegal (mostly because it
|
||||||
|
wouldn't be clear what to do with \verb\else\):
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
statement: stmt_list NEWLINE | compound_stmt
|
if test1: if test2: print x
|
||||||
compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
|
|
||||||
suite: statement | NEWLINE INDENT statement+ DEDENT
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Also note that the semicolon binds tighter that the colon in this
|
||||||
|
context (so to speak), so that in the following example, either all or
|
||||||
|
none of the \verb\print\ statements are executed:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
if some_test: print x; print y; print z
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Summarizing:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
|
||||||
|
suite: stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
|
||||||
|
statement: stmt_list NEWLINE | compound_stmt
|
||||||
|
stmt_list: simple_stmt (";" simple_stmt)* [";"]
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Note that statements always ends in a \verb\NEWLINE\ possibly followed
|
||||||
|
by a \verb\DEDENT\.
|
||||||
|
|
||||||
|
Also note that optional continuation clauses always begin with a
|
||||||
|
keyword that cannot start a statement, thus there are no ambiguities
|
||||||
|
(the `dangling \verb\else\' problem is solved in Python by requiring
|
||||||
|
nested \verb\if\ statements to be indented).
|
||||||
|
|
||||||
|
The formatting of the grammar rules in the following section places
|
||||||
|
each clause on a separate line for clarity.
|
||||||
|
|
||||||
\section{The {\tt if} statement}
|
\section{The {\tt if} statement}
|
||||||
|
|
||||||
|
The \verb\if\ statement is used for conditional execution:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
if_stmt: "if" condition ":" suite
|
if_stmt: "if" condition ":" suite
|
||||||
("elif" condition ":" suite)*
|
("elif" condition ":" suite)*
|
||||||
["else" ":" suite]
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
It selects exactly one of the suites, by testing the conditions one by
|
||||||
|
one until one is true; then that suite is executed. If all conditions
|
||||||
|
are false, the suite of the \verb\else\ clause is executed, if present.
|
||||||
|
|
||||||
\section{The {\tt while} statement}
|
\section{The {\tt while} statement}
|
||||||
|
|
||||||
|
The \verb\while\ statement is used for repeated execution as long as a
|
||||||
|
condition is true:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
while_stmt: "while" condition ":" suite ["else" ":" suite]
|
while_stmt: "while" condition ":" suite
|
||||||
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
This repeatedly tests the condition and, if it is true, executes the
|
||||||
|
first suite; if the condition is false (which may be the first time it
|
||||||
|
is tested) the suite of the \verb\else\ clause is executed, if
|
||||||
|
present, and the loop terminates.
|
||||||
|
|
||||||
|
A \verb\break\ statement executed in the first suite terminates the
|
||||||
|
loop without executing the \verb\else\ clause's suite. A
|
||||||
|
\verb\continue\ statement executed in the first suited skips the rest
|
||||||
|
of the suite and goes back to testing the condition.
|
||||||
|
|
||||||
\section{The {\tt for} statement}
|
\section{The {\tt for} statement}
|
||||||
|
|
||||||
|
The \verb\for\ statement is used to iterate over the elements of a
|
||||||
|
sequence (string, tuple or list):
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
for_stmt: "for" target_list "in" condition_list ":" suite
|
for_stmt: "for" target_list "in" condition_list ":" suite
|
||||||
["else" ":" suite]
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
The suite is executed once for each item in the condition list, in the
|
||||||
|
order of ascending indices. Each item in turn is assigned to the
|
||||||
|
target list using the standard rules for assignments, and then the
|
||||||
|
suite is executed. When the list is exhausted (which is immediately
|
||||||
|
when the sequence is empty), the suite in the \verb\else\ clause is
|
||||||
|
executed, if present.
|
||||||
|
|
||||||
|
A \verb\break\ statement executed in the first suite terminates the
|
||||||
|
loop without executing the \verb\else\ clause's suite. A
|
||||||
|
\verb\continue\ statement executed in the first suited skips the rest
|
||||||
|
of the suite and continues with the next item or with the \verb\else\
|
||||||
|
clause.
|
||||||
|
|
||||||
|
The suite may assign to the variable(s) in the target list; this does
|
||||||
|
not affect the next item assigned to it.
|
||||||
|
|
||||||
|
The target list are not deleted when the loop is finished (but if the
|
||||||
|
loop has executed 0 times it will not have been assigned to at all by
|
||||||
|
the loop).
|
||||||
|
|
||||||
|
The built-in function \verb\range()\ returns a sequence of integers
|
||||||
|
suitable to emulate the effect of Pascal's \verb\for i := 1 to n do\.
|
||||||
|
|
||||||
|
{\bf Warning:} There is a subtlety when the sequence is being modified
|
||||||
|
by the loop (this can only occur for lists). An internal counter is
|
||||||
|
used to keep track of which item is used next, and this is incremented
|
||||||
|
on each iteration. When this counter has reached the end of the
|
||||||
|
sequence the loop terminates. This means that if the suite deletes
|
||||||
|
the current (or a previous) item from the sequence, the next item will
|
||||||
|
be skipped (since it gets the index of the current item and this has
|
||||||
|
already been treated). Likewise, if the suite inserts an item in the
|
||||||
|
sequence before the current item, the current item will be treated
|
||||||
|
again the next time through the loop. This can lead to nasty bugs
|
||||||
|
that can be avoided by making a temporary copy using the \
|
||||||
|
|
||||||
\section{The {\tt try} statement}
|
\section{The {\tt try} statement}
|
||||||
|
|
||||||
|
The \verb\try\ statement specifies exception handlers and/or cleanup
|
||||||
|
code for a group of statements:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
try_stmt: "try" ":" suite
|
try_stmt: "try" ":" suite
|
||||||
("except" condition ["," condition] ":" suite)*
|
("except" condition ["," condition] ":" suite)*
|
||||||
|
["except" ":" suite]
|
||||||
["finally" ":" suite]
|
["finally" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
There are really two forms: \verb\try...except\ and
|
||||||
|
\verb\try...finally\. A \verb\try\ statement with both types of
|
||||||
|
clauses is equivalent to a \verb\try...finally\ statement with a
|
||||||
|
\verb\try...except\ statement in its \verb\try\ clause. A \verb\try\
|
||||||
|
statement with neither a \verb\except\ clause nor a \verb\finally\
|
||||||
|
clause just executes the suite of statements in its \verb\try\ clause.
|
||||||
|
|
||||||
|
The \verb\try...except\ form specifies one or more exception handlers.
|
||||||
|
When no exception occurs in the \verb\try\ clause, no exception
|
||||||
|
handler is executed. When an exception occurs in the \verb\try\
|
||||||
|
suite, a search for an exception handler HIRO
|
||||||
|
|
||||||
|
The \verb\try...finally\ form specifies a `cleanup' handler. The
|
||||||
|
\verb\try\ clause is executed. When no exception occurs, the
|
||||||
|
\verb\finally\ clause is executed. When an exception occurs on the
|
||||||
|
\verb\try\ clause, the exception is temporarily saved, the
|
||||||
|
\verb\finally\ clause is executed, and then the saved exception is
|
||||||
|
re-raised. If the \verb\finally\ clause raises another exception or
|
||||||
|
executes a \verb\return\, \verb\break\ or \verb\continue\ statement,
|
||||||
|
the saved exception is lost.
|
||||||
|
|
||||||
|
When a \verb\return\ or \verb\break\ statement is executed in the
|
||||||
|
\verb\try suite of a \verb\try...finally\ statement, the
|
||||||
|
\verb\finally\ clause is also executed `on the way out'. A
|
||||||
|
\verb\continue\ statement is illegal in the \verb\try\ clause (the
|
||||||
|
reason is a problem with the current implementation -- this
|
||||||
|
restriction may be lifted in the future).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Function definitions}
|
\section{Function definitions}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
336
Doc/ref/ref.tex
336
Doc/ref/ref.tex
|
@ -3,8 +3,7 @@
|
||||||
\documentstyle[11pt,myformat]{report}
|
\documentstyle[11pt,myformat]{report}
|
||||||
|
|
||||||
\title{\bf
|
\title{\bf
|
||||||
Python Reference Manual \\
|
Python Reference Manual
|
||||||
{\em Incomplete Draft}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
\author{
|
\author{
|
||||||
|
@ -88,11 +87,6 @@ standard modules. These are not documented here, but in the separate
|
||||||
mentioned when they interact in a significant way with the language
|
mentioned when they interact in a significant way with the language
|
||||||
definition.
|
definition.
|
||||||
|
|
||||||
\section{Warning}
|
|
||||||
|
|
||||||
This version of the manual is incomplete. Sections that still need to
|
|
||||||
be written or need considerable work are marked with ``XXX''.
|
|
||||||
|
|
||||||
\section{Notation}
|
\section{Notation}
|
||||||
|
|
||||||
The descriptions of lexical analysis and syntax use a modified BNF
|
The descriptions of lexical analysis and syntax use a modified BNF
|
||||||
|
@ -648,29 +642,83 @@ not contain null bytes.)
|
||||||
\end{description} % Mapping types
|
\end{description} % Mapping types
|
||||||
|
|
||||||
\item[Callable types]
|
\item[Callable types]
|
||||||
These are the types to which the function call operation can be applied:
|
These are the types to which the function call operation (written as
|
||||||
|
\verb\function(argument, argument, ...)\) can be applied:
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item[User-defined functions]
|
\item[User-defined functions]
|
||||||
XXX
|
A user-defined function is created by a function definition (starting
|
||||||
\item[Built-in functions]
|
with the \verb\def\ keyword). It should be called with an argument
|
||||||
XXX
|
list containing the same number of items as the function's
|
||||||
|
formal parameter list.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\func_code\ is the code object
|
||||||
|
representing the compiled function body, and \verb\func_globals\ is (a
|
||||||
|
reference to) the dictionary that holds the function's global
|
||||||
|
variables -- it implements the global name space of the module in
|
||||||
|
which the function was defined.
|
||||||
|
|
||||||
\item[User-defined methods]
|
\item[User-defined methods]
|
||||||
XXX
|
A user-defined method (a.k.a. {\tt object closure}) is a pair of a
|
||||||
|
class instance object and a user-defined function. It should be
|
||||||
|
called with an argument list containing one item less than the number
|
||||||
|
of items in the function's formal parameter list. When called, the
|
||||||
|
class instance becomes the first argument, and the call arguments are
|
||||||
|
shifted one to the right.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\im_self\ is the class instance
|
||||||
|
object, \verb\im_func\ is the function object.
|
||||||
|
|
||||||
|
\item[Built-in functions]
|
||||||
|
A built-in function object is a wrapper around a C function. Examples
|
||||||
|
of built-in functions are \verb\len\ and \verb\math.sin\. There
|
||||||
|
are no special attributes. The number and type of the arguments are
|
||||||
|
determined by the C function.
|
||||||
|
|
||||||
\item[Built-in methods]
|
\item[Built-in methods]
|
||||||
XXX
|
This is really a different disguise of a built-in function, this time
|
||||||
\item[User-defined classes]
|
containing an object passed to the C function as an implicit extra
|
||||||
XXX
|
argument. An example of a built-in method is \verb\list.append\ if
|
||||||
|
\verb\list\ is a list object.
|
||||||
|
|
||||||
|
\item[Classes]
|
||||||
|
Class objects are described below. When a class object is called as a
|
||||||
|
parameterless function, a new class instance (also described below) is
|
||||||
|
created and returned. The class's initialization function is not
|
||||||
|
called -- this is the responsibility of the caller. It is illegal to
|
||||||
|
call a class object with one or more arguments.
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
\item[Modules]
|
\item[Modules]
|
||||||
|
A module object is a container for a module's name space, which is a
|
||||||
|
dictionary (the same dictionary as referenced by the
|
||||||
|
\ver\func_globals\ attribute of functions defined in the module).
|
||||||
|
Module attribute references are translated to lookups in this
|
||||||
|
dictionary. A module object does not contain the code object used to
|
||||||
|
initialize the module (since it isn't needed once the initialization
|
||||||
|
is done).
|
||||||
|
|
||||||
|
There are two special read-only attributes: \verb\__dict__\ yields the
|
||||||
|
module's name space as a dictionary object; \verb\__name__\ yields the
|
||||||
|
module's name.
|
||||||
|
|
||||||
|
\item[Classes]
|
||||||
XXX
|
XXX
|
||||||
|
|
||||||
\item[Class instances]
|
\item[Class instances]
|
||||||
XXX
|
XXX
|
||||||
|
|
||||||
\item[Files]
|
\item[Files]
|
||||||
XXX
|
A file object represents an open file. (It is a wrapper around a C
|
||||||
|
{\tt stdio} file pointer.) File objects are created by the
|
||||||
|
\verb\open()\ built-in function, and also by \verb\posix.popen()\ and
|
||||||
|
the \verb\makefile\ method of socket objects. \verb\sys.stdin\,
|
||||||
|
\verb\sys.stdout\ and \verb\sys.stderr\ are file objects corresponding
|
||||||
|
the the interpreter's standard input, output and error streams.
|
||||||
|
See the Python Library Reference for methods of file objects and other
|
||||||
|
details.
|
||||||
|
|
||||||
\item[Internal types]
|
\item[Internal types]
|
||||||
A few types used internally by the interpreter are exposed to the user.
|
A few types used internally by the interpreter are exposed to the user.
|
||||||
|
@ -678,10 +726,57 @@ Their definition may change with future versions of the interpreter,
|
||||||
but they are mentioned here for completeness.
|
but they are mentioned here for completeness.
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item[Code objects]
|
\item[Code objects]
|
||||||
XXX
|
Code objects represent executable code. The difference between a code
|
||||||
|
object and a function object is that the function object contains an
|
||||||
|
explicit reference to the function's context (the module in which it
|
||||||
|
was defined) which a code object contains no context. There is no way
|
||||||
|
to execute a bare code object.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\co_code\ is a string representing
|
||||||
|
the sequence of instructions; \verb\co_consts\ is a list of literals
|
||||||
|
used by the code; \verb\co_names\ is a list of names (strings) used by
|
||||||
|
the code; \verb\co_filename\ is the filename from which the code was
|
||||||
|
compiled. (To find out the line numbers, you would have to decode the
|
||||||
|
instructions; the standard library module \verb\dis\ contains an
|
||||||
|
example of how to do this.)
|
||||||
|
|
||||||
|
\item[Frame objects]
|
||||||
|
Frame objects represent execution frames. They may occur in traceback
|
||||||
|
objects (see below).
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\f_back\ is to the previous
|
||||||
|
stack frame (towards the caller), or \verb\None\ if this is the bottom
|
||||||
|
stack frame; \verb\f_code\ is the code object being executed in this
|
||||||
|
frame; \verb\f_globals\ is the dictionary used to look up global
|
||||||
|
variables; \verb\f_locals\ is used for local variables;
|
||||||
|
\verb\f_lineno\ gives the line number and \verb\f_lasti\ gives the
|
||||||
|
precise instruction (this is an index into the instruction string of
|
||||||
|
the code object).
|
||||||
|
|
||||||
\item[Traceback objects]
|
\item[Traceback objects]
|
||||||
XXX
|
Traceback objects represent a stack trace of an exception. A
|
||||||
|
traceback object is created when an exception occurs. When the search
|
||||||
|
for an exception handler unwinds the execution stack, at each unwound
|
||||||
|
level a traceback object is inserted in front of the current
|
||||||
|
traceback. When an exception handler is entered, the stack trace is
|
||||||
|
made available to the program as \verb\sys.exc_traceback\. When the
|
||||||
|
program contains no suitable handler, the stack trace is written
|
||||||
|
(nicely formatted) to the standard error stream; if the interpreter is
|
||||||
|
interactive, it is made available to the user as
|
||||||
|
\verb\sys.last_traceback\.
|
||||||
|
|
||||||
|
Special read-only attributes: \verb\tb_next\ is the next level in the
|
||||||
|
stack trace (towards the frame where the exception occurred), or
|
||||||
|
\verb\None\ if there is no next level; \verb\tb_frame\ points to the
|
||||||
|
execution frame of the current level; \verb\tb_lineno\ gives the line
|
||||||
|
number where the exception occurred; \verb\tb_lasti\ indicates the
|
||||||
|
precise instruction. The line number and last instruction in the
|
||||||
|
traceback may differ from the line number of its frame object if the
|
||||||
|
exception occurred in a \verb\try\ statement with no matching
|
||||||
|
\verb\except\ clause or with a \verb\finally\ clause.
|
||||||
|
|
||||||
\end{description} % Internal types
|
\end{description} % Internal types
|
||||||
|
|
||||||
\end{description} % Types
|
\end{description} % Types
|
||||||
|
@ -1120,8 +1215,8 @@ Mappings (dictionaries) are compared through lexicographic
|
||||||
comparison of their sorted (key, value) lists.%
|
comparison of their sorted (key, value) lists.%
|
||||||
\footnote{This is expensive since it requires sorting the keys first,
|
\footnote{This is expensive since it requires sorting the keys first,
|
||||||
but about the only sensible definition. It was tried to compare
|
but about the only sensible definition. It was tried to compare
|
||||||
dictionaries using the following rules, but this gave surprises in
|
dictionaries using the rule below for most other types, but this gave
|
||||||
cases like \verb|if d == {}: ...|.}
|
surprises in cases like \verb|if d == {}: ...|.}
|
||||||
|
|
||||||
\item
|
\item
|
||||||
Most other types compare unequal unless they are the same object;
|
Most other types compare unequal unless they are the same object;
|
||||||
|
@ -1209,7 +1304,6 @@ Several simple statements may occur on a single line separated
|
||||||
by semicolons. The syntax for simple statements is:
|
by semicolons. The syntax for simple statements is:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
stmt_list: simple_stmt (";" simple_stmt)* [";"]
|
|
||||||
simple_stmt: expression_stmt
|
simple_stmt: expression_stmt
|
||||||
| assignment
|
| assignment
|
||||||
| pass_stmt
|
| pass_stmt
|
||||||
|
@ -1503,8 +1597,10 @@ import_stmt: "import" identifier ("," identifier)*
|
||||||
|
|
||||||
Import statements are executed in two steps: (1) find a module, and
|
Import statements are executed in two steps: (1) find a module, and
|
||||||
initialize it if necessary; (2) define a name or names in the local
|
initialize it if necessary; (2) define a name or names in the local
|
||||||
name space. The first form (without \verb\from\) repeats these steps
|
name space (of the scope where the \verb\import\ statement occurs).
|
||||||
for each identifier in the list.
|
The first form (without \verb\from\) repeats these steps for each
|
||||||
|
identifier in the list, the \verb\from\ form performs them once, with
|
||||||
|
the first identifier specifying the module name.
|
||||||
|
|
||||||
The system maintains a table of modules that have been initialized,
|
The system maintains a table of modules that have been initialized,
|
||||||
indexed by module name. (The current implementation makes this table
|
indexed by module name. (The current implementation makes this table
|
||||||
|
@ -1520,8 +1616,35 @@ path; it is initialized from the shell environment variable
|
||||||
|
|
||||||
If a built-in module is found, its built-in initialization code is
|
If a built-in module is found, its built-in initialization code is
|
||||||
executed and step (1) is finished. If no matching file is found,
|
executed and step (1) is finished. If no matching file is found,
|
||||||
\verb\ImportError\ is raised (and step (2) is never started). If a file is
|
\verb\ImportError\ is raised. If a file is found, it is parsed,
|
||||||
found, it is parsed. If a syntax error occurs, HIRO
|
yielding an executable code block. If a syntax error occurs,
|
||||||
|
\verb\SyntaxError\ is raised. Otherwise, an empty module of the given
|
||||||
|
name is created and inserted in the module table, and then the code
|
||||||
|
block is executed in the context of this module. Exceptions during
|
||||||
|
this execution terminate step (1).
|
||||||
|
|
||||||
|
When step (1) finishes without raising an exception, step (2) can
|
||||||
|
begin.
|
||||||
|
|
||||||
|
The first form of \verb\import\ statement binds the module name in the
|
||||||
|
local name space to the module object, and then goes on to import the
|
||||||
|
next identifier, if any. The \verb\from\ from does not bind the
|
||||||
|
module name: it goes through the list of identifiers, looks each one
|
||||||
|
of them up in the module found in step (1), and binds the name in the
|
||||||
|
local name space to the object thus found. If a name is not found,
|
||||||
|
\verb\ImportError\ is raised. If the list of identifiers is replaced
|
||||||
|
by a star (\verb\*\), all names defined in the module are bound,
|
||||||
|
except those beginning with an underscore(\verb\_\).
|
||||||
|
|
||||||
|
Names bound by import statements may not occur in \verb\global\
|
||||||
|
statements in the same scope.
|
||||||
|
|
||||||
|
The \verb\from\ form with \verb\*\ may only occur in a module scope.
|
||||||
|
|
||||||
|
(The current implementation does not enforce the latter two
|
||||||
|
restrictions, but programs should not abuse this freedom, as future
|
||||||
|
implementations may enforce them or silently change the meaning of the
|
||||||
|
program.)
|
||||||
|
|
||||||
\section{The {\tt global} statement}
|
\section{The {\tt global} statement}
|
||||||
|
|
||||||
|
@ -1529,47 +1652,198 @@ found, it is parsed. If a syntax error occurs, HIRO
|
||||||
global_stmt: "global" identifier ("," identifier)*
|
global_stmt: "global" identifier ("," identifier)*
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
(XXX To be done.)
|
The \verb\global\ statement is a declaration which holds for the
|
||||||
|
entire current scope. It means that the listed identifiers are to be
|
||||||
|
interpreted as globals. While {\em using} global names is automatic
|
||||||
|
if they are not defined in the local scope, {\em assigning} to global
|
||||||
|
names would be impossible without \verb\global\.
|
||||||
|
|
||||||
|
Names listed in a \verb\global\ statement must not be used in the same
|
||||||
|
scope before that \verb\global\ statement is executed.
|
||||||
|
|
||||||
|
Name listed in a \verb\global\ statement must not be defined as formal
|
||||||
|
parameters or in a \verb\for\ loop control target, \verb\class\
|
||||||
|
definition, function definition, or \verb\import\ statement.
|
||||||
|
|
||||||
|
(The current implementation does not enforce the latter two
|
||||||
|
restrictions, but programs should not abuse this freedom, as future
|
||||||
|
implementations may enforce them or silently change the meaning of the
|
||||||
|
program.)
|
||||||
|
|
||||||
\chapter{Compound statements}
|
\chapter{Compound statements}
|
||||||
|
|
||||||
(XXX The semantic definitions of this chapter are still to be done.)
|
Compound statements contain (groups of) other statements; they affect
|
||||||
|
or control the execution of those other statements in some way.
|
||||||
|
|
||||||
|
The \verb\if\, \verb\while\ and \verb\for\ statements implement
|
||||||
|
traditional control flow constructs. \verb\try\ specifies exception
|
||||||
|
handlers and/or cleanup code for a group of statements. Function and
|
||||||
|
class definitions are also syntactically compound statements.
|
||||||
|
|
||||||
|
Compound statements consist of one or more `clauses'. A clause
|
||||||
|
consists of a header and a `suite'. The clause headers of a
|
||||||
|
particular compound statement are all at the same indentation level;
|
||||||
|
all clauses begin with a uniquely identifying keyword and end with a
|
||||||
|
colon. A suite is a group of statements controlled by a clause. A
|
||||||
|
suite can be a bunch of semicolon-separated simple statements on the
|
||||||
|
same line as the header, following the colon, or it can be a list of
|
||||||
|
indented statements. Only the latter form of suite can contain nested
|
||||||
|
compound statements; the following is illegal (mostly because it
|
||||||
|
wouldn't be clear what to do with \verb\else\):
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
statement: stmt_list NEWLINE | compound_stmt
|
if test1: if test2: print x
|
||||||
compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
|
|
||||||
suite: statement | NEWLINE INDENT statement+ DEDENT
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Also note that the semicolon binds tighter that the colon in this
|
||||||
|
context (so to speak), so that in the following example, either all or
|
||||||
|
none of the \verb\print\ statements are executed:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
if some_test: print x; print y; print z
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Summarizing:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
|
||||||
|
suite: stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
|
||||||
|
statement: stmt_list NEWLINE | compound_stmt
|
||||||
|
stmt_list: simple_stmt (";" simple_stmt)* [";"]
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Note that statements always ends in a \verb\NEWLINE\ possibly followed
|
||||||
|
by a \verb\DEDENT\.
|
||||||
|
|
||||||
|
Also note that optional continuation clauses always begin with a
|
||||||
|
keyword that cannot start a statement, thus there are no ambiguities
|
||||||
|
(the `dangling \verb\else\' problem is solved in Python by requiring
|
||||||
|
nested \verb\if\ statements to be indented).
|
||||||
|
|
||||||
|
The formatting of the grammar rules in the following section places
|
||||||
|
each clause on a separate line for clarity.
|
||||||
|
|
||||||
\section{The {\tt if} statement}
|
\section{The {\tt if} statement}
|
||||||
|
|
||||||
|
The \verb\if\ statement is used for conditional execution:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
if_stmt: "if" condition ":" suite
|
if_stmt: "if" condition ":" suite
|
||||||
("elif" condition ":" suite)*
|
("elif" condition ":" suite)*
|
||||||
["else" ":" suite]
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
It selects exactly one of the suites, by testing the conditions one by
|
||||||
|
one until one is true; then that suite is executed. If all conditions
|
||||||
|
are false, the suite of the \verb\else\ clause is executed, if present.
|
||||||
|
|
||||||
\section{The {\tt while} statement}
|
\section{The {\tt while} statement}
|
||||||
|
|
||||||
|
The \verb\while\ statement is used for repeated execution as long as a
|
||||||
|
condition is true:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
while_stmt: "while" condition ":" suite ["else" ":" suite]
|
while_stmt: "while" condition ":" suite
|
||||||
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
This repeatedly tests the condition and, if it is true, executes the
|
||||||
|
first suite; if the condition is false (which may be the first time it
|
||||||
|
is tested) the suite of the \verb\else\ clause is executed, if
|
||||||
|
present, and the loop terminates.
|
||||||
|
|
||||||
|
A \verb\break\ statement executed in the first suite terminates the
|
||||||
|
loop without executing the \verb\else\ clause's suite. A
|
||||||
|
\verb\continue\ statement executed in the first suited skips the rest
|
||||||
|
of the suite and goes back to testing the condition.
|
||||||
|
|
||||||
\section{The {\tt for} statement}
|
\section{The {\tt for} statement}
|
||||||
|
|
||||||
|
The \verb\for\ statement is used to iterate over the elements of a
|
||||||
|
sequence (string, tuple or list):
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
for_stmt: "for" target_list "in" condition_list ":" suite
|
for_stmt: "for" target_list "in" condition_list ":" suite
|
||||||
["else" ":" suite]
|
["else" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
The suite is executed once for each item in the condition list, in the
|
||||||
|
order of ascending indices. Each item in turn is assigned to the
|
||||||
|
target list using the standard rules for assignments, and then the
|
||||||
|
suite is executed. When the list is exhausted (which is immediately
|
||||||
|
when the sequence is empty), the suite in the \verb\else\ clause is
|
||||||
|
executed, if present.
|
||||||
|
|
||||||
|
A \verb\break\ statement executed in the first suite terminates the
|
||||||
|
loop without executing the \verb\else\ clause's suite. A
|
||||||
|
\verb\continue\ statement executed in the first suited skips the rest
|
||||||
|
of the suite and continues with the next item or with the \verb\else\
|
||||||
|
clause.
|
||||||
|
|
||||||
|
The suite may assign to the variable(s) in the target list; this does
|
||||||
|
not affect the next item assigned to it.
|
||||||
|
|
||||||
|
The target list are not deleted when the loop is finished (but if the
|
||||||
|
loop has executed 0 times it will not have been assigned to at all by
|
||||||
|
the loop).
|
||||||
|
|
||||||
|
The built-in function \verb\range()\ returns a sequence of integers
|
||||||
|
suitable to emulate the effect of Pascal's \verb\for i := 1 to n do\.
|
||||||
|
|
||||||
|
{\bf Warning:} There is a subtlety when the sequence is being modified
|
||||||
|
by the loop (this can only occur for lists). An internal counter is
|
||||||
|
used to keep track of which item is used next, and this is incremented
|
||||||
|
on each iteration. When this counter has reached the end of the
|
||||||
|
sequence the loop terminates. This means that if the suite deletes
|
||||||
|
the current (or a previous) item from the sequence, the next item will
|
||||||
|
be skipped (since it gets the index of the current item and this has
|
||||||
|
already been treated). Likewise, if the suite inserts an item in the
|
||||||
|
sequence before the current item, the current item will be treated
|
||||||
|
again the next time through the loop. This can lead to nasty bugs
|
||||||
|
that can be avoided by making a temporary copy using the \
|
||||||
|
|
||||||
\section{The {\tt try} statement}
|
\section{The {\tt try} statement}
|
||||||
|
|
||||||
|
The \verb\try\ statement specifies exception handlers and/or cleanup
|
||||||
|
code for a group of statements:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
try_stmt: "try" ":" suite
|
try_stmt: "try" ":" suite
|
||||||
("except" condition ["," condition] ":" suite)*
|
("except" condition ["," condition] ":" suite)*
|
||||||
|
["except" ":" suite]
|
||||||
["finally" ":" suite]
|
["finally" ":" suite]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
There are really two forms: \verb\try...except\ and
|
||||||
|
\verb\try...finally\. A \verb\try\ statement with both types of
|
||||||
|
clauses is equivalent to a \verb\try...finally\ statement with a
|
||||||
|
\verb\try...except\ statement in its \verb\try\ clause. A \verb\try\
|
||||||
|
statement with neither a \verb\except\ clause nor a \verb\finally\
|
||||||
|
clause just executes the suite of statements in its \verb\try\ clause.
|
||||||
|
|
||||||
|
The \verb\try...except\ form specifies one or more exception handlers.
|
||||||
|
When no exception occurs in the \verb\try\ clause, no exception
|
||||||
|
handler is executed. When an exception occurs in the \verb\try\
|
||||||
|
suite, a search for an exception handler HIRO
|
||||||
|
|
||||||
|
The \verb\try...finally\ form specifies a `cleanup' handler. The
|
||||||
|
\verb\try\ clause is executed. When no exception occurs, the
|
||||||
|
\verb\finally\ clause is executed. When an exception occurs on the
|
||||||
|
\verb\try\ clause, the exception is temporarily saved, the
|
||||||
|
\verb\finally\ clause is executed, and then the saved exception is
|
||||||
|
re-raised. If the \verb\finally\ clause raises another exception or
|
||||||
|
executes a \verb\return\, \verb\break\ or \verb\continue\ statement,
|
||||||
|
the saved exception is lost.
|
||||||
|
|
||||||
|
When a \verb\return\ or \verb\break\ statement is executed in the
|
||||||
|
\verb\try suite of a \verb\try...finally\ statement, the
|
||||||
|
\verb\finally\ clause is also executed `on the way out'. A
|
||||||
|
\verb\continue\ statement is illegal in the \verb\try\ clause (the
|
||||||
|
reason is a problem with the current implementation -- this
|
||||||
|
restriction may be lifted in the future).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Function definitions}
|
\section{Function definitions}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue