[pypy-commit] pypy py3.3: fixing _csv lineterminator exception message

numerodix noreply at buildbot.pypy.org
Sat Jul 26 13:02:25 CEST 2014


Author: Martin Matusiak <numerodix at gmail.com>
Branch: py3.3
Changeset: r72494:cbfe89ead8c2
Date: 2014-07-26 12:12 +0200
http://bitbucket.org/pypy/pypy/changeset/cbfe89ead8c2/

Log:	fixing _csv lineterminator exception message

diff --git a/pypy/module/_csv/interp_csv.py b/pypy/module/_csv/interp_csv.py
--- a/pypy/module/_csv/interp_csv.py
+++ b/pypy/module/_csv/interp_csv.py
@@ -34,10 +34,15 @@
         return default
     return space.int_w(w_src)
 
-def _get_str(space, w_src, default):
+def _get_str(space, w_src, default, attrname):
     if w_src is None:
         return default
-    return space.unicode_w(w_src)
+    try:
+        return space.unicode_w(w_src)
+    except OperationError as e:
+        if e.match(space, space.w_TypeError):
+            raise oefmt(space.w_TypeError, '"%s" must be a string', attrname)
+        raise
 
 def _get_char(space, w_src, default, name):
     if w_src is None:
@@ -91,7 +96,7 @@
     dialect.delimiter = _get_char(space, w_delimiter, u',', 'delimiter')
     dialect.doublequote = _get_bool(space, w_doublequote, True)
     dialect.escapechar = _get_char(space, w_escapechar, u'\0', 'escapechar')
-    dialect.lineterminator = _get_str(space, w_lineterminator, u'\r\n')
+    dialect.lineterminator = _get_str(space, w_lineterminator, u'\r\n', 'lineterminator')
     dialect.quotechar = _get_char(space, w_quotechar, u'"', 'quotechar')
     tmp_quoting = _get_int(space, w_quoting, QUOTE_MINIMAL)
     dialect.skipinitialspace = _get_bool(space, w_skipinitialspace, False)
diff --git a/pypy/module/_csv/test/test_dialect.py b/pypy/module/_csv/test/test_dialect.py
--- a/pypy/module/_csv/test/test_dialect.py
+++ b/pypy/module/_csv/test/test_dialect.py
@@ -67,6 +67,9 @@
                 kwargs = {name: value}
                 raises(TypeError, _csv.register_dialect, 'foo1', **kwargs)
 
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', lineterminator=4)
+        assert exc_info.value.args[0] == '"lineterminator" must be a string'
+
     def test_bool_arg(self):
         # boolean arguments take *any* object and use its truth-value
         import _csv


More information about the pypy-commit mailing list