我无法在python中执行以下代码:
import json
import import_logger #defined by me
logger = import_logger.logIt(__file__)
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
这是什么原因?
答案 0 :(得分:0)
如果源文件混合制表符和空格,使得含义取决于制表符在空格中的价值,则缩进被视为不一致。在这种情况下会引发TabError。
您声明with
语句的主体缩进了3个标签。如果是这样,则with
本身的行会缩进4个空格。这意味着,如果将制表符停止位设置为每个空格,则with
语句的主体将不再相对于第一行缩进,从而产生TabError
。
考虑以下代码(标签由$
代替)
for y in [1]:
for x in [1,2,3]:
if x == 2:
print("even")
$else:
$ print("odd")
如果制表位设置为8个字符,则该循环看起来像一个for
/ if
语句的循环。如果将制表位设置为4个字符,则它看起来像是带有else
子句的for
循环。其他制表位看起来像是无效使用缩进。
Python 2将在解析过程中用空格替换制表符,以使缩进是8的倍数,然后才确定所得的缩进是否一致。这可能会导致意外的缩进错误,因为代码仍可以解析,但行为与其“可见”缩进不同。例如,前面的示例将被Python 2接受,例如带有else
子句的if
语句,即使在使用4个空格的制表位的编辑器中,它也会 look 就像else
和else
一样。