mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #21578: Fixed misleading error message when ImportError called with
invalid keyword args.
This commit is contained in:
		
							parent
							
								
									c0b7037d4f
								
							
						
					
					
						commit
						47dee11ba7
					
				
					 3 changed files with 46 additions and 24 deletions
				
			
		|  | @ -1096,6 +1096,23 @@ def test_attributes(self): | ||||||
|         self.assertEqual(exc.name, 'somename') |         self.assertEqual(exc.name, 'somename') | ||||||
|         self.assertEqual(exc.path, 'somepath') |         self.assertEqual(exc.path, 'somepath') | ||||||
| 
 | 
 | ||||||
|  |         msg = "'invalid' is an invalid keyword argument for this function" | ||||||
|  |         with self.assertRaisesRegex(TypeError, msg): | ||||||
|  |             ImportError('test', invalid='keyword') | ||||||
|  | 
 | ||||||
|  |         with self.assertRaisesRegex(TypeError, msg): | ||||||
|  |             ImportError('test', name='name', invalid='keyword') | ||||||
|  | 
 | ||||||
|  |         with self.assertRaisesRegex(TypeError, msg): | ||||||
|  |             ImportError('test', path='path', invalid='keyword') | ||||||
|  | 
 | ||||||
|  |         with self.assertRaisesRegex(TypeError, msg): | ||||||
|  |             ImportError(invalid='keyword') | ||||||
|  | 
 | ||||||
|  |         msg = "'invalid|another' is an invalid keyword argument for this function" | ||||||
|  |         with self.assertRaisesRegex(TypeError, msg): | ||||||
|  |             ImportError('test', invalid='keyword', another=True) | ||||||
|  | 
 | ||||||
|     def test_non_str_argument(self): |     def test_non_str_argument(self): | ||||||
|         # Issue #15778 |         # Issue #15778 | ||||||
|         with check_warnings(('', BytesWarning), quiet=True): |         with check_warnings(('', BytesWarning), quiet=True): | ||||||
|  |  | ||||||
|  | @ -10,6 +10,9 @@ Release date: TBA | ||||||
| Core and Builtins | Core and Builtins | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #21578: Fixed misleading error message when ImportError called with | ||||||
|  |   invalid keyword args. | ||||||
|  | 
 | ||||||
| - Issue #28203: Fix incorrect type in error message from | - Issue #28203: Fix incorrect type in error message from | ||||||
|   ``complex(1.0, {2:3})``. Patch by Soumya Sharma. |   ``complex(1.0, {2:3})``. Patch by Soumya Sharma. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -618,36 +618,38 @@ SimpleExtendsException(PyExc_BaseException, KeyboardInterrupt, | ||||||
| static int | static int | ||||||
| ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds) | ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds) | ||||||
| { | { | ||||||
|  |     static char *kwlist[] = {"name", "path", 0}; | ||||||
|  |     PyObject *empty_tuple; | ||||||
|     PyObject *msg = NULL; |     PyObject *msg = NULL; | ||||||
|     PyObject *name = NULL; |     PyObject *name = NULL; | ||||||
|     PyObject *path = NULL; |     PyObject *path = NULL; | ||||||
| 
 | 
 | ||||||
| /* Macro replacement doesn't allow ## to start the first line of a macro,
 |     if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1) | ||||||
|    so we move the assignment and NULL check into the if-statement. */ |  | ||||||
| #define GET_KWD(kwd) { \ |  | ||||||
|     kwd = PyDict_GetItemString(kwds, #kwd); \ |  | ||||||
|     if (kwd) { \ |  | ||||||
|         Py_INCREF(kwd); \ |  | ||||||
|         Py_XSETREF(self->kwd, kwd); \ |  | ||||||
|         if (PyDict_DelItemString(kwds, #kwd)) \ |  | ||||||
|             return -1; \ |  | ||||||
|     } \ |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (kwds) { |  | ||||||
|         GET_KWD(name); |  | ||||||
|         GET_KWD(path); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1) |  | ||||||
|         return -1; |  | ||||||
|     if (PyTuple_GET_SIZE(args) != 1) |  | ||||||
|         return 0; |  | ||||||
|     if (!PyArg_UnpackTuple(args, "ImportError", 1, 1, &msg)) |  | ||||||
|         return -1; |         return -1; | ||||||
| 
 | 
 | ||||||
|     Py_INCREF(msg); |     empty_tuple = PyTuple_New(0); | ||||||
|     Py_XSETREF(self->msg, msg); |     if (!empty_tuple) | ||||||
|  |         return -1; | ||||||
|  |     if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:ImportError", kwlist, | ||||||
|  |                                      &name, &path)) { | ||||||
|  |         Py_DECREF(empty_tuple); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  |     Py_DECREF(empty_tuple); | ||||||
|  | 
 | ||||||
|  |     if (name) { | ||||||
|  |         Py_INCREF(name); | ||||||
|  |         Py_XSETREF(self->name, name); | ||||||
|  |     } | ||||||
|  |     if (path) { | ||||||
|  |         Py_INCREF(path); | ||||||
|  |         Py_XSETREF(self->path, path); | ||||||
|  |     } | ||||||
|  |     if (PyTuple_GET_SIZE(args) == 1) { | ||||||
|  |         msg = PyTuple_GET_ITEM(args, 0); | ||||||
|  |         Py_INCREF(msg); | ||||||
|  |         Py_XSETREF(self->msg, msg); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka