Python能否以嵌套路径格式从子目录导入类?以Selenium为例
问题解答:Python子目录导入类的语法问题
不行,你尝试的from selenium.webdriver.support import ui.WebDriverWait这种语法在Python里是不合法的,会直接抛出SyntaxError,核心原因是Python导入语法有明确规则:
from <包/模块> import <名称>里的<名称>必须是该包/模块直接包含的对象:要么是子模块(对应包的子目录,需存在__init__.py标识为包),要么是模块内定义的类、函数、变量。ui.WebDriverWait是selenium.webdriver.support.ui子模块下wait.py文件里的类,并不是selenium.webdriver.support直接包含的成员,所以不能用点链跨层级直接引用。
针对你提到的Selenium场景,给你几种合法的导入方式:
方式1:直接从最终模块导入目标类和模块
这是最清晰的写法,直接定位到类所在的具体模块:
from selenium.webdriver.support.ui.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
方式2:先导入子模块,再访问类
如果需要用到ui子模块下的其他内容,可以先导入子模块,再通过子模块访问类:
from selenium.webdriver.support import ui, expected_conditions as EC # 使用时写 ui.wait.WebDriverWait
方式3:多行分组导入(精简语句行数)
如果想减少导入语句的行数,可以用括号把同层级的导入内容分组,多行书写:
from selenium.webdriver.support import ( expected_conditions as EC, ui ) from selenium.webdriver.support.ui.wait import WebDriverWait
总结来说,Python不支持跨模块层级的点式导入,必须逐层明确模块关系,或者直接从最终模块导入目标对象。
内容的提问来源于stack exchange,提问作者The Amateur Coder
相关产品推荐
相关产品推荐

