检查字符串是否是有效的Python对象路径

时间:2017-11-28 17:49:38

标签: python

有时您需要动态导入Python对象,例如使用importlib

import importlib
importlib.import_module(name='my.module.path')

我想知道是否有一种标准方法来检查输入importlib.import_module的字符串是否有效,即可以指定Python对象的位置。

如果我必须自己实现验证方法,我会尝试将字符串与正则表达式匹配,如([a-zA-Z_][a-zA-Z0-9_]\.?)+(以字母或下划线开头的名称,由字母,下划线和数字组成,并用点分隔)。

标准库或第三库中是否有方法可以检查此问题?如果没有,是否有PEP描述有效的Python路径?如果没有,我的正则表达式是否足够?

1 个答案:

答案 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语句。

因此,对这个问题没有任何切断和干燥的答案。原则上,任何字符串都是有效的。