有时您需要动态导入Python对象,例如使用importlib
:
import importlib
importlib.import_module(name='my.module.path')
我想知道是否有一种标准方法来检查输入importlib.import_module
的字符串是否有效,即可以指定Python对象的位置。
如果我必须自己实现验证方法,我会尝试将字符串与正则表达式匹配,如([a-zA-Z_][a-zA-Z0-9_]\.?)+
(以字母或下划线开头的名称,由字母,下划线和数字组成,并用点分隔)。
标准库或第三库中是否有方法可以检查此问题?如果没有,是否有PEP描述有效的Python路径?如果没有,我的正则表达式是否足够?
答案 0 :(得分:2)
import
语句要求名称是有效的Python标识符。来自import
statement documentation:
import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* | "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* | "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" | "from" module "import" "*" module ::= (identifier ".")* identifier relative_module ::= "."* module | "."+ name ::= identifier
标识符基本上是以字母或下划线开头的任何内容,后跟0个或更多字母,下划线或数字。字母和数字的定义很宽泛,请参阅Identifiers and keywords section;基本上,NFKC规范化形式的特定Unicode字符类都包括在内。
但是,请注意,使用importlib()
,任何内容。您可以导入没有有效Python标识符名称的模块,因为整个过程非常灵活。如果要导入仅包含数字的模块,那么仍然可以使用 ,而不是使用import
语句。
因此,对这个问题没有任何切断和干燥的答案。原则上,任何字符串都是有效的。