By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,213 Members | 2,108 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,213 IT Pros & Developers. It's quick & easy.

Catching a specific IO error

P: n/a
Hi group :)

I have this standard line:

export = open(self.exportFileName , 'w')

'exportFileName' is a full path given by the user. If the user gives an
illegal path or filename the following exception is raised:
"IOError: [Errno 2] No such file or directory: /some/path/file.txt"

So at the moment I do this:

try:
export = open(self.exportFileName , 'w')
export.write("Something")
export.close()
except IOError:
# calling an error handling method.

Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?

Thanks
Tina

Apr 24 '07 #1
Share this Question
Share on Google+
7 Replies


P: n/a
Tina I schrieb:
Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?
There's an example that uses the error number:
http://docs.python.org/tut/node10.ht...00000000000000

Thomas
--
sinature: http://nospam.nowire.org/signature_usenet.png
Apr 24 '07 #2

P: n/a
En Tue, 24 Apr 2007 08:44:05 -0300, Tina I <ti*****@bestemselv.com>
escribió:
Hi group :)

I have this standard line:

export = open(self.exportFileName , 'w')

'exportFileName' is a full path given by the user. If the user gives an
illegal path or filename the following exception is raised:
"IOError: [Errno 2] No such file or directory: /some/path/file.txt"

So at the moment I do this:

try:
export = open(self.exportFileName , 'w')
export.write("Something")
export.close()
except IOError:
# calling an error handling method.

Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?
You can get the 2 as the errno exception attribute. BTW, 2 == errno.ENOENT

try:
export = open(self.exportFileName , 'w')
except IOError, e:
if e.errno==errno.ENOENT:
# handle the "No such file or directory" error
# calling an error handling method.

See http://docs.python.org/lib/module-exceptions.html

--
Gabriel Genellina
Apr 24 '07 #3

P: n/a
Thomas Krüger wrote:
Tina I schrieb:
>Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?

There's an example that uses the error number:
http://docs.python.org/tut/node10.ht...00000000000000
So what you'll need to do is catch all IOError exceptions, then test to
see if you've got (one of) the particular one(s) you are interested in.
If not then you can re-raise the same error with a bare "raise"
statement, and any containing exception handlers will be triggered. If
there are none then you will see the familiar traceback termination message.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
Recent Ramblings http://holdenweb.blogspot.com

Apr 24 '07 #4

P: n/a
Steve Holden wrote:
Thomas Krüger wrote:
>Tina I schrieb:
>>Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?
There's an example that uses the error number:
http://docs.python.org/tut/node10.ht...00000000000000

So what you'll need to do is catch all IOError exceptions, then test to
see if you've got (one of) the particular one(s) you are interested in.
If not then you can re-raise the same error with a bare "raise"
statement, and any containing exception handlers will be triggered. If
there are none then you will see the familiar traceback termination message.

regards
Steve
you could also use some pre-testing of the filename os.path.isfile,
os.path.isdir, os.path.split are good
functions to test file/directory existence. Also to verify that you have
permission to manipulate a file, os.access is a good function.
sph
Apr 24 '07 #5

P: n/a
Steven Howe wrote:
Steve Holden wrote:
>Thomas Krüger wrote:
>>Tina I schrieb:

Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?

There's an example that uses the error number:
http://docs.python.org/tut/node10.ht...00000000000000

So what you'll need to do is catch all IOError exceptions, then test
to see if you've got (one of) the particular one(s) you are interested
in. If not then you can re-raise the same error with a bare "raise"
statement, and any containing exception handlers will be triggered. If
there are none then you will see the familiar traceback termination
message.

regards
Steve
you could also use some pre-testing of the filename os.path.isfile,
os.path.isdir, os.path.split are good
functions to test file/directory existence. Also to verify that you have
permission to manipulate a file, os.access is a good function.
The try first approach is better for at least two reasons:

1) It saves you an extra stat() on the disk, which can be really
important for some filesystems I use :)

2) It is atomic. If os.path.isfile() returns True but the file is
deleted before you open it, you are still going to have to handle the
exception.
--
Michael Hoffman
Apr 24 '07 #6

P: n/a
On 25/04/2007 4:06 AM, Steven Howe wrote:
Steve Holden wrote:
>Thomas Krüger wrote:
>>Tina I schrieb:

Now, this works but of course it catches every IOError, and I can not
figure out how to restrict it to only catch the "[Errno 2]"?

There's an example that uses the error number:
http://docs.python.org/tut/node10.ht...00000000000000

So what you'll need to do is catch all IOError exceptions, then test
to see if you've got (one of) the particular one(s) you are interested
in. If not then you can re-raise the same error with a bare "raise"
statement, and any containing exception handlers will be triggered. If
there are none then you will see the familiar traceback termination
message.

regards
Steve
you could also use some pre-testing of the filename os.path.isfile,
os.path.isdir, os.path.split are good
functions to test file/directory existence.
In general, this is laborious, tedious, and possibly even platform
dependent. Then you still need to wrap the open call in try/accept. Why
bother?

In particular, (1) please explain how os.path.split helps with existence
testing:

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
| >>import os.path
| >>os.path.split(r'no\such\path\nothing.nix')
('no\\such\\path', 'nothing.nix')

(2) please explain why you avoided mentioning os.path.exists.
Apr 25 '07 #7

P: n/a
Gabriel Genellina wrote:
You can get the 2 as the errno exception attribute. BTW, 2 == errno.ENOENT

try:
export = open(self.exportFileName , 'w')
except IOError, e:
if e.errno==errno.ENOENT:
# handle the "No such file or directory" error
# calling an error handling method.

See http://docs.python.org/lib/module-exceptions.html

--Gabriel Genellina
Perfect! Just what I was looking for. Thank you! :)

Tina
Apr 25 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.