From 68f6815ba43f6e10a91f7e9880af1e40dea65ff7 Mon Sep 17 00:00:00 2001 From: jreback Date: Fri, 12 Jul 2013 20:43:41 -0400 Subject: [PATCH] TST: little endian failure, GH4222 --- pandas/io/stata.py | 12 ++++++++++-- pandas/io/tests/test_stata.py | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pandas/io/stata.py b/pandas/io/stata.py index 603924ac6a292..9257338cd4913 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -327,8 +327,16 @@ def _read_header(self): typlist = [ord(self.path_or_buf.read(1)) for i in range(self.nvar)] else: typlist = [self.OLD_TYPE_MAPPING[self._decode_bytes(self.path_or_buf.read(1))] for i in range(self.nvar)] - self.typlist = [self.TYPE_MAP[typ] for typ in typlist] - self.dtyplist = [self.DTYPE_MAP[typ] for typ in typlist] + + try: + self.typlist = [self.TYPE_MAP[typ] for typ in typlist] + except: + raise ValueError("cannot convert stata types [{0}]".format(','.join(typlist))) + try: + self.dtyplist = [self.DTYPE_MAP[typ] for typ in typlist] + except: + raise ValueError("cannot convert stata dtypes [{0}]".format(','.join(typlist))) + if self.format_version > 108: self.varlist = [self._null_terminate(self.path_or_buf.read(33)) for i in range(self.nvar)] else: diff --git a/pandas/io/tests/test_stata.py b/pandas/io/tests/test_stata.py index 0e32fb91fc743..fa8bf6f80ad03 100644 --- a/pandas/io/tests/test_stata.py +++ b/pandas/io/tests/test_stata.py @@ -132,7 +132,7 @@ def test_read_dta4(self): def test_write_dta5(self): if not is_little_endian(): raise nose.SkipTest("known failure of test_write_dta5 on non-little endian") - + original = DataFrame([(np.nan, np.nan, np.nan, np.nan, np.nan)], columns=['float_miss', 'double_miss', 'byte_miss', 'int_miss', 'long_miss']) original.index.name = 'index' @@ -145,7 +145,7 @@ def test_write_dta5(self): def test_write_dta6(self): if not is_little_endian(): raise nose.SkipTest("known failure of test_write_dta6 on non-little endian") - + original = self.read_csv(self.csv3) original.index.name = 'index' @@ -191,6 +191,9 @@ def test_read_dta9(self): ) def test_read_dta10(self): + if not is_little_endian(): + raise nose.SkipTest("known failure of test_write_dta10 on non-little endian") + original = DataFrame( data= [