I would separate the two independent access methods:
```
try
    io = zlibopen
    do_sth(io)
    close(io)
catch
    io = open
    do_sth(io)
    close(io)
end
```

If you want another try block to ensure the file is closed, I'd open
secondary try blocks within this one. I think you're trying to do two
things at once -- see whether zlib is needed, and also check for I/O errors.

Incidentally, you don't need a `finally` clause for the regular `open`
function; you can instead write

```
contents = open(fn, "r") do io
    do_sth(io)
end
```

which ensures that `io` will be closed no matter what.

-erik


On Sun, Dec 6, 2015 at 8:16 PM, Seth <catch...@bromberger.com> wrote:

> Hi,
>
> I'm moving from Gzip.jl to Libz.jl, and am running into a problem. Gzip
> used to allow a file to be opened using its methods even if the file was
> not encrypted. Libz doesn't allow that.
>
> The problem I'm having is that I can't figure out a try/catch/finally that
> works. Basically, I want this (pseudocode):
>
> io = ZlibInflateInputStream(open(fn,"r"))   # this will succeed if fn
> exists, even if fn isn't compressed
> contents = try
>    do_something_with_io(io)   # this will error if fn isn't compressed
> catch
>   io = open(fn,"r")   # so we try to open it as an uncompressed file
>   do_something_with_io(io)
> finally
>   close(io)
> end
>
> but this doesn't work (the finally statement fails, for one).
>
> What's the accepted way of doing this?
>



-- 
Erik Schnetter <schnet...@gmail.com>
http://www.perimeterinstitute.ca/personal/eschnetter/

Reply via email to