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
的結果中,也是對齊的了,那這樣就是正常的代碼了。這正是網上流傳的這種方法能夠解決問題的原因。