TabError: inconsistent use of tabs and spaces in indentation 查验及解决方法
报错代码
def eccv16(pretrained=True):model = ECCVGenerator()if(pretrained):import torch.utils.model_zoo as model_zoomodel.load_state_dict(torch.load('/home/ps/.cache/torch/hub/checkpoints/colorization_release_v2-9b330a0b.pth', map_location='cpu'))# model.load_state_dict(model_zoo.load_url('https://colorizers.s3.us-east-2.amazonaws.com/colorization_release_v2-9b330a0b.pth',map_location='cpu',check_hash=True))return model
代码来自github上colorization自监督学习仓库,笔者使用的编辑器是VS Code,注释起来的一句是原文,注释上面的一句是笔者自己添加的,报错正是来自这一句:
File "/home/ps/JJ_Projects/ssl_transformer_aes/ssl_related/colorization-master/colorizers/eccv16.py", line 105model.load_state_dict(torch.load('/home/ps/.cache/torch/hub/checkpoints/colorization_release_v2-9b330a0b.pth', map_location='cpu'))^
TabError: inconsistent use of tabs and spaces in indentation
可以看到报错信息大概是说tab
和space
的缩进不一致,但是我们肉眼明明看到缩进是正常对齐的。笔者猜测报错的原因是,原来代码的作者和笔者修改时的编辑器、缩进方式的设置是不一样的。网上查到的解决方法都是将正常不报错的地方的代码前的缩进复制过来。但是这是为什么呢,我们怎么能在报错之前看到哪一行的缩进有问题呢?
查验及解决方法
笔者想到,如果用一种统一的显示方式是否就能看出缩进方式的不同了,因此想到在命令行中输出打印文件内容。
如何查验
我们在命令行使用cat colorizers/eccv16.py
命令来查看文件内容:
果不其然,确实是我们自己写的(即报错)行的缩进和其他行是不一致的,虽然在VS Code编辑器中查看时二者是对齐的。
解决方法
那我们先按照网上的解决方法试一试,即将正常不报错的地方的代码前的缩进复制过来,再cat
显示文件:
注意,我们将正常缩进复制过来之后,在编辑器中还是对齐的正常的缩进,在cat
的结果中,也是对齐的了,那这样就是正常的代码了。这正是网上流传的这种方法能够解决问题的原因。