今天把windows下的python代碼傳到服務器上,結果莫名其妙的報了一堆indent的錯誤
網上建議說用: python -m tabnanny filename.py 查一下
然后就用space把有問題的行的tab都換了,程序代碼一點沒改,就好了
不明白,為甚啊?於是搜了下~
發現PEP-8上說:Spaces are the preferred indentation method.
//PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment
其實就是說,有些人的編輯器tab是空8個space,有些人的tab是空4個space,並且有些編輯器對tab的顯示各不相同,如果tab和space混用了看起來可能
在python2中可以使用-t選項,它就會檢查哪些地方混用了tab和space,並提出警告
當用-tt選項的時候,檢查的要求會更嚴格,警告就會變成錯誤
不過如果已經出現了這種混用的錯誤,暫時我還木有找到什么好辦法快速更正誒,只能重新一個個space的輸入
******************************************************************************
昨天的問題有了解決方法
如果遇到:unexpected indent
或者:unindent does not match any outer indentation level
那么原因是,你的源文件里混用了space和tab
既然PEP-8建議說使用space,但是我們又不想一個space一個space的輸入
那么就讓vim把我們的tab自動轉換為space,設置方法如下:
(什么叫做設置?,就是說讓你修改用戶目錄下的.vimrc文件。沒有這個文件?那就touch建一個)
set expandtab 用space替代tab的輸入
%ret! 4 每個tab用4個space替代
其他一些設置還可以有:
set tabstop=4 設定tab寬度為4個字符
set shiftwidth=4 設定自動縮進為4個字符
set noexpandtab 不用space替代tab的輸入
設置成這樣以后,當你tab縮進一個,然后再backspace往前刪的時候,你會發現你的光標是一個space一個space的往前跳,而不是一個tab一個tab的跳了
這說明你剛剛輸入的tab其實都是space