33"""Extensions to the Python standard library."""
44
55import sys
6+ from typing import Optional , Callable , Sequence
67
78__all__ = [
89 "try_import" ,
2425__version__ = (1 , 0 , 0 , "final" , 0 )
2526
2627
27- def try_import (name , alternative = None , error_callback = None ):
28+ def try_import (
29+ name : str ,
30+ alternative : Optional [object ] = None ,
31+ error_callback : Optional [Callable [[ImportError ], None ]] = None ,
32+ ) -> object :
2833 """Attempt to import ``name``. If it fails, return ``alternative``.
2934
3035 When supporting multiple versions of Python or optional dependencies, it
@@ -38,7 +43,7 @@ def try_import(name, alternative=None, error_callback=None):
3843 when the module cannot be loaded.
3944 """
4045 module_segments = name .split ("." )
41- last_error = None
46+ last_error : Optional [ ImportError ] = None
4247 remainder = []
4348 # module_name will be what successfully imports. We cannot walk from the
4449 # __import__ result because in import loops (A imports A.B, which imports
@@ -48,7 +53,7 @@ def try_import(name, alternative=None, error_callback=None):
4853 try :
4954 __import__ (module_name )
5055 except ImportError :
51- last_error = sys .exc_info ()[1 ]
56+ last_error = sys .exc_info ()[1 ] # type: ignore
5257 remainder .append (module_segments .pop ())
5358 continue
5459 else :
@@ -60,7 +65,7 @@ def try_import(name, alternative=None, error_callback=None):
6065 module = sys .modules [module_name ]
6166 nonexistent = object ()
6267 for segment in reversed (remainder ):
63- module = getattr (module , segment , nonexistent )
68+ module = getattr (module , segment , nonexistent ) # type: ignore
6469 if module is nonexistent :
6570 if last_error is not None and error_callback is not None :
6671 error_callback (last_error )
@@ -71,7 +76,11 @@ def try_import(name, alternative=None, error_callback=None):
7176_RAISE_EXCEPTION = object ()
7277
7378
74- def try_imports (module_names , alternative = _RAISE_EXCEPTION , error_callback = None ):
79+ def try_imports (
80+ module_names : Sequence [str ],
81+ alternative : object = _RAISE_EXCEPTION ,
82+ error_callback : Optional [Callable [[ImportError ], None ]] = None ,
83+ ) -> object :
7584 """Attempt to import modules.
7685
7786 Tries to import the first module in ``module_names``. If it can be
0 commit comments