python - python中的缩进错误,如何检查空格或制表符以避免错误?
问题描述
我无法在 python 中执行以下代码:(对不起,如果这是一个菜鸟问题,但我是新手)
def main(jsonIn):
print("MAIN")
print(data["host"])
if __name__ == '__main__':
logger.log("Loading configuration File.")
with open('untitled_1.json') as configFile:
data = json.load(configFile) #HAS 3 TAB SPACES(1[IF STATEMENT]+2[WITH])
print(data)
main(data)
else:
print("This code does not support being imported as a module")
它给了我以下错误:
File "file.py", line 14
with open('untitled_1.json') as configFile:
^
TabError: inconsistent use of tabs and spaces in indentation
这是什么原因?我该如何解决这个问题?
解决方案
从文档:
如果源文件混合制表符和空格的方式使含义取决于空格中制表符的价值,则缩进会被拒绝;在这种情况下会引发 TabError。
您with
声明语句的主体缩进了 3 个制表符。如果这是真的,那么它with
本身的行会缩进 4 个空格。这意味着如果每个制表位都设置为一个空格,则with
语句的主体将不再相对于第一行缩进,从而导致TabError
.
考虑这段代码(用 a 替换标签$
):
for y in [1]:
for x in [1,2,3]:
if x == 2:
print("even")
$else:
$ print("odd")
如果您的制表位设置为 8 个字符,这看起来就像一个for
包含if
/else
语句的循环。如果将制表位设置为 4 个字符,则它看起来像一个for
带有else
子句的循环。其他制表位看起来像是对缩进的无效使用。
相比之下,Python 2 会在解析期间用空格替换制表符,以便缩进是 8 的倍数,然后才确定结果缩进是否一致。这可能会导致意外的缩进错误,因为代码仍然可以解析但具有与其“可见”缩进不同的行为。例如,前面的示例将被 Python 2 接受为if
带有else
子句的语句,即使在使用 4 个空格的制表位的编辑器中,它看起来像else
带有for
.
推荐阅读
- salesforce - 当事件和处理程序在不同的组件中时,如何测试组件事件?
- python - 如何通过 Python API 获取数据集信息
- python - spyder plotly:绘制条形图的问题
- javascript - Rewriting function using arrow function to fix IE compatibility
- php - 在 laravel 中与视图作曲家共享后未定义的变量
- javascript - 注销反应时未呈现登录路线
- flask - 上传功能的烧瓶自定义错误处理
- r - 无法追加到表
- php - 单选按钮在php中给出错误的值
- php - 仅从 CSS 中提取路径并排除路径后的任何内容