Skip to content

Commit 30b61e6

Browse files
committed
Properly close opened files in StataWriter
1 parent 3b0f25f commit 30b61e6

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

pandas/io/stata.py

+16-13
Original file line numberDiff line numberDiff line change
@@ -1881,9 +1881,7 @@ def __init__(self, fname, data, convert_dates=None, write_index=True,
18811881
if byteorder is None:
18821882
byteorder = sys.byteorder
18831883
self._byteorder = _set_endianness(byteorder)
1884-
self._file = _open_file_binary_write(
1885-
fname, self._encoding or self._default_encoding
1886-
)
1884+
self._fname = fname
18871885
self.type_converters = {253: np.int32, 252: np.int16, 251: np.int8}
18881886

18891887
def _write(self, to_write):
@@ -2078,16 +2076,21 @@ def _prepare_pandas(self, data):
20782076
self.fmtlist[key] = self._convert_dates[key]
20792077

20802078
def write_file(self):
2081-
self._write_header(time_stamp=self._time_stamp,
2082-
data_label=self._data_label)
2083-
self._write_descriptors()
2084-
self._write_variable_labels()
2085-
# write 5 zeros for expansion fields
2086-
self._write(_pad_bytes("", 5))
2087-
self._prepare_data()
2088-
self._write_data()
2089-
self._write_value_labels()
2090-
self._file.close()
2079+
self._file = _open_file_binary_write(
2080+
self._fname, self._encoding or self._default_encoding
2081+
)
2082+
try:
2083+
self._write_header(time_stamp=self._time_stamp,
2084+
data_label=self._data_label)
2085+
self._write_descriptors()
2086+
self._write_variable_labels()
2087+
# write 5 zeros for expansion fields
2088+
self._write(_pad_bytes("", 5))
2089+
self._prepare_data()
2090+
self._write_data()
2091+
self._write_value_labels()
2092+
finally:
2093+
self._file.close()
20912094

20922095
def _write_value_labels(self):
20932096
for vl in self._value_labels:

0 commit comments

Comments
 (0)