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/