@@ -409,6 +409,21 @@ def test_dunder_lazy_import_builtins(self):
409409 self .assertNotIn ("test.test_import.data.lazy_imports.basic2" , sys .modules )
410410 self .assertEqual (dunder_lazy_import_builtins .basic .basic2 , 42 )
411411
412+ def test_dunder_lazy_import_argument_validation (self ):
413+ """__lazy_import__ should strictly validate argument types to avoid SystemError."""
414+ invalid_type_scenarios = [
415+ (123 , {}, {}, [], 0 , "argument 1 must be str" ),
416+ ('os' , 1 , {}, [], 0 , "argument 2 must be dict" ),
417+ ('os' , {}, "not_a_dict" , [], 0 , "argument 3 must be dict" ),
418+ ('os' , {}, {}, 42 , 0 , "argument 4 must be a list or tuple" ),
419+ ('os' , {}, {}, "string_instead_of_list" , 0 , "argument 4 must be a list or tuple" ),
420+ ]
421+
422+ for name , glbs , lcls , flist , lvl , msg in invalid_type_scenarios :
423+ with self .subTest (case = msg ):
424+ with self .assertRaisesRegex (TypeError , msg ):
425+ __lazy_import__ (name , glbs , lcls , flist , lvl )
426+
412427
413428class SysLazyImportsAPITests (unittest .TestCase ):
414429 """Tests for sys lazy imports API functions."""
0 commit comments