On Wed, 2004-11-24 at 12:06 +0000, Jochen Voss wrote:
> Hello,
>
> On Fri, Nov 19, 2004 at 10:33:43AM -0600, John Hunter wrote:
> > >>>>> "Jochen" == Jochen Voss <vo...@se...> writes:
> > Jochen> Slight problem: it might now be a little bit more
> > Jochen> difficult to include the name of the file which could not
> > Jochen> be opened in the error message. The IOError exception
> > Jochen> will probably only have "permission denied" associated
> > Jochen> with it.
> >
> > Looks OK, at least on linux
> >
> >
> > >>> file('/sbin/ldconfig', 'w')
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in ?
> > IOError: [Errno 13] Permission denied: '/sbin/ldconfig'
>
> But sometimes it doesn't give the file name:
>
> >>> from matplotlib.matlab import *
> >>> plot([1,2,3],[2,3,1])
> [<matplotlib.lines.Line2D instance at 0x41ef774c>]
> >>> savefig("/forbidden.png")
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File ".../matlab.py", line 1009, in savefig
> manager.canvas.print_figure(*args, **kwargs)
> File ".../backends/backend_gtkagg.py", line 69, in print_figure
> agg.print_figure(filename, dpi, facecolor, edgecolor, orientation)
> File ".../backends/backend_agg.py", line 379, in print_figure
> self.renderer._renderer.write_png(str(filename))
> RuntimeError: could not open file
>
> I did not investigate what happens here, but if there is an easy way to
> get the file name into the exception we should probably use it.
>
> All the best,
> Jochen
For an IOError the exception attribute 'filename' is set to the
filename. With your example above self.renderer._renderer.write_png(str
(filename)) is Agg C++ extension code
The line
fp = fopen(file_name, "wb");
could be changed to something like
if ((fp = fopen(file_name, "wb")) == NULL)
throw Py::IOError("could not open file", filename);
Does this look right John?
Steve
|