diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index 6fb21d146..0d04c906f 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -122,11 +122,11 @@ class LiteralInclude(Directive): encoding = self.options.get('encoding', env.config.source_encoding) codec_info = codecs.lookup(encoding) + f = None try: f = codecs.StreamReaderWriter(open(filename, 'rb'), codec_info[2], codec_info[3], 'strict') lines = f.readlines() - f.close() except (IOError, OSError): return [document.reporter.warning( 'Include file %r not found or reading it failed' % filename, @@ -136,6 +136,9 @@ class LiteralInclude(Directive): 'Encoding %r used for reading included file %r seems to ' 'be wrong, try giving an :encoding: option' % (encoding, filename))] + finally: + if f is not None: + f.close() objectname = self.options.get('pyobject') if objectname is not None: