Python:在模块导入时防止混合制表符/空格

Python:在模块导入时防止混合制表符/空格,python,whitespace,indentation,Python,Whitespace,Indentation,我知道,通过使用-tt调用Python,您可以确保使用纯制表符/间隔代码。但是,当我无法控制顶级调用时,我是否仍可以在脚本加载的模块上强制执行此行为?如果您可以控制初始脚本,则您可以自己添加检查。例如,不只是导入学生的脚本,您可以使用一个函数,首先检查模块的缩进错误,然后导入它: # instead of import foo foo.bar() # you have something like foo = verifyAndImport('foo') foo.bar() 而verifyA

我知道,通过使用
-tt
调用Python,您可以确保使用纯制表符/间隔代码。但是,当我无法控制顶级调用时,我是否仍可以在脚本加载的模块上强制执行此行为?

如果您可以控制初始脚本,则您可以自己添加检查。例如,不只是导入学生的脚本,您可以使用一个函数,首先检查模块的缩进错误,然后导入它:

# instead of
import foo
foo.bar()

# you have something like
foo = verifyAndImport('foo')
foo.bar()
verifyAndImport
将如下所示:

import importlib
def verifyAndImport (moduleName):
    with open(moduleName + '.py') as f:
        # TODO: logic to verify consistent indentation

    return importlib.import_module(moduleName)


另一种解决方案是使用
-tt
参数,让初始脚本在新的Python进程中启动实际脚本。但正如tdelaney所指出的,这可能会导致错误,而这些错误不是由学生造成的。

这是一个有趣的问题,但。。。你为什么在乎?您是在谈论导入第三方软件包和模块,还是您自己的软件包和模块?如果他是前者,那么就没有什么意义了——如果代码被解析,不管空格问题如何,导入都会成功。如果是后者,则您可以完全控制格式设置,这永远不会成为问题。唯一重要的方法是使用AST包解析导入的模块。这是一种教育设置。学生修改给定的Python模块,他们可以通过调用导入模块的评估脚本来测试自己。由于修改现有模块通常会导致不一致的空格,并且有时会产生违反直觉的错误消息,我想最好给他们一个明确的提示,告诉他们出了什么问题。然后把这些文件作为文本打开,自己检查缩进是否不一致。这与我更正提交的内容无关,@poke,它是关于防止编程初学者花费数小时调试错误。值得注意的是,这只是python 2中的一个问题。这是因为Python3从不允许空格和制表符的混合。如果可以切换到使用python 3,则可以完全避免此问题。有关检查选项卡一致性的代码,请参阅: