This gets more complicated because the return value from the try and catch blocks will be the close() statement, when I really want the output from do_sth. How do you work around that?
On Sunday, December 6, 2015 at 6:02:21 PM UTC-8, Erik Schnetter wrote: > > 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 <catc...@bromberger.com <javascript:> > > 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 <schn...@gmail.com <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ >