Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d5f599a

Browse files
committed
Merge 3.6
2 parents 9ee351f + f9cca36 commit d5f599a

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

Lib/test/test_string_literals.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,23 @@ def test_eval_str_invalid_escape(self):
111111
continue
112112
with self.assertWarns(DeprecationWarning):
113113
self.assertEqual(eval(r"'\%c'" % b), '\\' + chr(b))
114+
114115
with warnings.catch_warnings(record=True) as w:
115116
warnings.simplefilter('always', category=DeprecationWarning)
116117
eval("'''\n\\z'''")
117118
self.assertEqual(len(w), 1)
118119
self.assertEqual(w[0].filename, '<string>')
119120
self.assertEqual(w[0].lineno, 2)
120121

122+
with warnings.catch_warnings(record=True) as w:
123+
warnings.simplefilter('error', category=DeprecationWarning)
124+
with self.assertRaises(SyntaxError) as cm:
125+
eval("'''\n\\z'''")
126+
exc = cm.exception
127+
self.assertEqual(w, [])
128+
self.assertEqual(exc.filename, '<string>')
129+
self.assertEqual(exc.lineno, 2)
130+
121131
def test_eval_str_raw(self):
122132
self.assertEqual(eval(""" r'x' """), 'x')
123133
self.assertEqual(eval(r""" r'\x01' """), '\\' + 'x01')
@@ -150,13 +160,23 @@ def test_eval_bytes_invalid_escape(self):
150160
continue
151161
with self.assertWarns(DeprecationWarning):
152162
self.assertEqual(eval(r"b'\%c'" % b), b'\\' + bytes([b]))
163+
153164
with warnings.catch_warnings(record=True) as w:
154165
warnings.simplefilter('always', category=DeprecationWarning)
155166
eval("b'''\n\\z'''")
156167
self.assertEqual(len(w), 1)
157168
self.assertEqual(w[0].filename, '<string>')
158169
self.assertEqual(w[0].lineno, 2)
159170

171+
with warnings.catch_warnings(record=True) as w:
172+
warnings.simplefilter('error', category=DeprecationWarning)
173+
with self.assertRaises(SyntaxError) as cm:
174+
eval("b'''\n\\z'''")
175+
exc = cm.exception
176+
self.assertEqual(w, [])
177+
self.assertEqual(exc.filename, '<string>')
178+
self.assertEqual(exc.lineno, 2)
179+
160180
def test_eval_bytes_raw(self):
161181
self.assertEqual(eval(""" br'x' """), b'x')
162182
self.assertEqual(eval(""" rb'x' """), b'x')

Python/ast.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4129,7 +4129,13 @@ warn_invalid_escape_sequence(struct compiling *c, const node *n,
41294129
NULL, NULL) < 0 &&
41304130
PyErr_ExceptionMatches(PyExc_DeprecationWarning))
41314131
{
4132-
const char *s = PyUnicode_AsUTF8(msg);
4132+
const char *s;
4133+
4134+
/* Replace the DeprecationWarning exception with a SyntaxError
4135+
to get a more accurate error report */
4136+
PyErr_Clear();
4137+
4138+
s = PyUnicode_AsUTF8(msg);
41334139
if (s != NULL) {
41344140
ast_error(c, n, s);
41354141
}

0 commit comments

Comments
 (0)