When to use exceptions (was Re: reducing if statements...)
Christian Tanzer
tanzer at swing.co.at
Sun Aug 26 03:51:48 EDT 2001
"Andrew Dalke" <dalke at dalkescientific.com> wrote:
> tanzer at swing.co.at wrote:
> > IO_Exception_Map = { 2 : NoSuchFile
> > , ...
> > , 13 : PermissionDenied
> > , ...
> > , 20 : NotADirectory
> > }
>
> This isn't correct. You can't use 2 and expect that to be
> the right number. You need to use errno.ENOENT instead of 2 since
> it may be different on different machines. Quoting from
> errnomodule.c
Excuse my being lazy and just playing in the interpreter to see a few
errorcodes. For the purpose of a quick example that should be good
enough.
For production code you are right, of course.
> Also, looking through the Python code, there's a lot of places which
> put the errno into the exception, not just IOError
>
> PyErr_SetFromErrno(BsddbError);
> PyErr_SetFromErrno(CdError);
> PyErr_SetFromErrno(DbmError);
> PyErr_SetFromErrno(ImgfileError);
> PyErr_SetFromErrno(LinuxAudioError);
> PyErr_SetFromErrno(PyExc_IOError);
> PyErr_SetFromErrno(PyExc_RuntimeError);
> PyErr_SetFromErrno(PyExc_ValueError);
> PyErr_SetFromErrno(PySocket_Error);
> PyErr_SetFromErrno(ResourceError);
> PyErr_SetFromErrno(SelectError);
> PyErr_SetFromErrno(SunAudioError);
> PyErr_SetFromErrno(mmap_module_error);
> PyErr_SetFromErrnoWithFilename(LinuxAudioError,
> PyErr_SetFromErrnoWithFilename(SunAudioError,
>
> so quite a bit of the code may need to be changed.
I didn't actually propose any changes to be done (although such
changes would improve Python, IMHO). This topic come up when somebody
asked whether to use exceptions or error codes...
I don't know what PyErr_SetFromErrno does but it might be enough to
change this one function/macro to switch to an exception hierarchy
without needing to change all the callers of PyErr_SetFromErrno.
--
Christian Tanzer tanzer at swing.co.at
Glasauergasse 32 Tel: +43 1 876 62 36
A-1130 Vienna, Austria Fax: +43 1 877 66 92
More information about the Python-list
mailing list