mirror of
				https://github.com/python/cpython.git
				synced 2025-10-26 11:14:33 +00:00 
			
		
		
		
	 abea73bf4a
			
		
	
	
		abea73bf4a
		
	
	
	
	
		
			
			This makes the parser consistent with the tokenize module (already the case
in `pypy`).
sample
------
```python
x = 5\
```
before
------
```console
$ python3 t.py
$ python3 -mtokenize t.py
t.py:2:0: error: EOF in multi-line statement
```
after
-----
```console
$ ./python t.py
  File "t.py", line 3
    x = 5\
         ^
SyntaxError: unexpected EOF while parsing
$ ./python -m tokenize t.py
t.py:2:0: error: EOF in multi-line statement
```
https://bugs.python.org/issue2180
		
	
			
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """test script for a few new invalid token catches"""
 | |
| 
 | |
| import sys
 | |
| from test import support
 | |
| from test.support import script_helper
 | |
| import unittest
 | |
| 
 | |
| class EOFTestCase(unittest.TestCase):
 | |
|     def test_EOFC(self):
 | |
|         expect = "EOL while scanning string literal (<string>, line 1)"
 | |
|         try:
 | |
|             eval("""'this is a test\
 | |
|             """)
 | |
|         except SyntaxError as msg:
 | |
|             self.assertEqual(str(msg), expect)
 | |
|         else:
 | |
|             raise support.TestFailed
 | |
| 
 | |
|     def test_EOFS(self):
 | |
|         expect = ("EOF while scanning triple-quoted string literal "
 | |
|                   "(<string>, line 1)")
 | |
|         try:
 | |
|             eval("""'''this is a test""")
 | |
|         except SyntaxError as msg:
 | |
|             self.assertEqual(str(msg), expect)
 | |
|         else:
 | |
|             raise support.TestFailed
 | |
| 
 | |
|     def test_line_continuation_EOF(self):
 | |
|         """A contination at the end of input must be an error; bpo2180."""
 | |
|         expect = 'unexpected EOF while parsing (<string>, line 1)'
 | |
|         with self.assertRaises(SyntaxError) as excinfo:
 | |
|             exec('x = 5\\')
 | |
|         self.assertEqual(str(excinfo.exception), expect)
 | |
|         with self.assertRaises(SyntaxError) as excinfo:
 | |
|             exec('\\')
 | |
|         self.assertEqual(str(excinfo.exception), expect)
 | |
| 
 | |
|     @unittest.skipIf(not sys.executable, "sys.executable required")
 | |
|     def test_line_continuation_EOF_from_file_bpo2180(self):
 | |
|         """Ensure tok_nextc() does not add too many ending newlines."""
 | |
|         with support.temp_dir() as temp_dir:
 | |
|             file_name = script_helper.make_script(temp_dir, 'foo', '\\')
 | |
|             rc, out, err = script_helper.assert_python_failure(file_name)
 | |
|             self.assertIn(b'unexpected EOF while parsing', err)
 | |
| 
 | |
|             file_name = script_helper.make_script(temp_dir, 'foo', 'y = 6\\')
 | |
|             rc, out, err = script_helper.assert_python_failure(file_name)
 | |
|             self.assertIn(b'unexpected EOF while parsing', err)
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     unittest.main()
 |