posix.error is a tuple, not an object or a string as docs say

Ivan Van Laningham ivanlan at callware.com
Tue Aug 10 22:23:03 CEST 1999


Hi Ben, All--

Ben Gertzfield wrote:
> 
> >>>>> "Michael" == Michael P Reilly <arcege at shore.net> writes:
> 
>     Michael> The long and short of this is that you can use it like a
>     Michael> tuple if more than one argument was given, and as the
>     Michael> object otherwise.
> 
>     Michael> For some of your own reassurance, print the type of
>     Michael> "error" in the except clause.
> 
> Right, but my problem is that I can't use it as an object as the
> documentation says..
> 
> Python 1.5.1 (#1, Dec 17 1998, 20:58:15)  [GCC 2.7.2.3] on linux2
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> import os
> >>> try:
> ...     input = os.fdopen(42)
> ... except os.error, error:
> ...     print error.errno
> ...     print error.strerror
> ...
> Traceback (innermost last):
>   File "<stdin>", line 4, in ?
> AttributeError: errno
> 
> Yet the documentation says:
> 
> "When exceptions are classes, this exception carries two attributes,
> errno and strerror. The first holds the value of the C errno variable,
> and the latter holds the corresponding error message from strerror()."
> 
> So something else is a bit wacky, no?
> 

Try this script on a nonexistent file:  "python readit.py
doesntexist.txt", for example.
---------------------------------------
#!/usr/local/bin/python

import os
import sys
import errno

if __name__ == "__main__" :
    if len ( sys.argv ) > 1 :
	try:
	    f = open ( sys.argv[ 1 ], "rb" )
	except :
	    x = sys.exc_info()
	    print type (x)
	    print type(x[0])
	    print dir(x[0])
	    print type(x[1])
	    print dir(x[1])
	    print x[1].errno
	    print type(x[2])
	    print "No file named %s!" % ( sys.argv[ 1 ] )
	    sys.exit(1)
	while 1 :
	    t = f.readline ( )
	    if t == '' :
		break
	    if '\n' in t :
		t = t[ : -1 ]
	    if '\r' in t :
		t = t[ : -1 ]
	    sys.stdout.write ( t + '\n' )
	f.close ( )
------------------------------------------------


> --
> Brought to you by the letters C and H and the number 11.

<brought-to-you-by-chapter-8-of-teach-yourself-python-in-24-hours>-ly
y'rs,
Ivan;-)
----------------------------------------------
Ivan Van Laningham
Callware Technologies, Inc.
ivanlan at callware.com
ivanlan at home.com
http://www.pauahtun.org
See also: 
http://www.foretec.com/python/workshops/1998-11/proceedings.html
Army Signal Corps:  Cu Chi, Class of '70
----------------------------------------------




More information about the Python-list mailing list