Commit 1eda5c9a authored by R David Murray's avatar R David Murray

#8652: update errors tutorial.

The tutorial had some outdated examples.  The patch also adds a caution
about the meaning of parens in the except statement.

Patch by Marien Zwart.
parent 5525eb77
...@@ -120,6 +120,14 @@ name multiple exceptions as a parenthesized tuple, for example:: ...@@ -120,6 +120,14 @@ name multiple exceptions as a parenthesized tuple, for example::
... except (RuntimeError, TypeError, NameError): ... except (RuntimeError, TypeError, NameError):
... pass ... pass
Note that the parentheses around this tuple are required, because
``except ValueError, e:`` was the syntax used for what is normally
written as ``except ValueError as e:`` in modern Python (described
below). The old syntax is still supported for backwards compatibility.
This means ``except RuntimeError, TypeError`` is not equivalent to
``except (RuntimeError, TypeError):`` but to ``except RuntimeError as
TypeError:`` which is not what you want.
The last except clause may omit the exception name(s), to serve as a wildcard. The last except clause may omit the exception name(s), to serve as a wildcard.
Use this with extreme caution, since it is easy to mask a real programming error Use this with extreme caution, since it is easy to mask a real programming error
in this way! It can also be used to print an error message and then re-raise in this way! It can also be used to print an error message and then re-raise
...@@ -131,8 +139,8 @@ the exception (allowing a caller to handle the exception as well):: ...@@ -131,8 +139,8 @@ the exception (allowing a caller to handle the exception as well)::
f = open('myfile.txt') f = open('myfile.txt')
s = f.readline() s = f.readline()
i = int(s.strip()) i = int(s.strip())
except IOError as (errno, strerror): except IOError as e:
print "I/O error({0}): {1}".format(errno, strerror) print "I/O error({0}): {1}".format(e.errno, e.strerror)
except ValueError: except ValueError:
print "Could not convert data to an integer." print "Could not convert data to an integer."
except: except:
...@@ -177,7 +185,7 @@ attributes to it as desired. :: ...@@ -177,7 +185,7 @@ attributes to it as desired. ::
... print type(inst) # the exception instance ... print type(inst) # the exception instance
... print inst.args # arguments stored in .args ... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly ... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly ... x, y = inst.args
... print 'x =', x ... print 'x =', x
... print 'y =', y ... print 'y =', y
... ...
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment