4

私は現在Windows7でKomodoEditを使用していますが、TextWranglerを搭載したMacでこの問題が発生しました。なんらかの理由で、Pythonで書いているときに大きな問題となる、ある種の空白エラーが発生します。たとえば、すべてが適切にタブ化されているように見えますが、Komodoは現在「あいまいな空白」エラーを表示しています

//How it appears in my editor
def SaveList(self, directory):
    templist = []
    templistbox2 = []
    for n,i in enumerate(self.listbox2.get(0,END)): 
       templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))
    for filename in sorted(os.listdir(directory)):
        self.templist.insert(i, filename)
        print filename #whitespace error here

私がWindowsとMacの両方で2つの異なるエディタでこれを経験したことを考えると、私が知らない設定があるのか​​、それとも何か間違ったことをしているのか疑問に思います。

4

3 に答える 3

7

コードをファイルtest.pyにコピーして、

cat -A test.py

そうか

//How it appears in my editor$
def SaveList(self, directory):$
    templist = []$
    templistbox2 = []$
    for n,i in enumerate(self.listbox2.get(0,END)): $
       templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))$
    for filename in sorted(os.listdir(directory)):$
        self.templist.insert(i, filename)$
^I    print filename #whitespace error here$

^Iこれは、最後の行に4つのスペースが続くタブ(で表される)があることを示します。

Windowsの同等のツールが何であるかはわかりませんが、Macにはcat -Aコマンドが必要です。タブとスペースの位置が表示されます。


タブをスペースに変換するreindent.pyというプログラムがあります。

reindent.py test.py

Unixには、スペースをタブに変換するunexpandコマンドもあります。


ほとんどのPythonプログラマーは、インデントにタブではなくスペースを使用します。Web上にあるPythonコードのほとんどは、タブではなくスペースを使用します。

エディターがタブを追加している可能性がありますが、Webからコードのスニペットを取得した場合、ファイルにタブとスペースの両方が含まれている可能性があります。

フローを使用してインデントとしてのスペースの規則を採用するのが最も簡単なので、他の人のコードをそれほど再フォーマットする必要はありません。

ちなみに、インデントとしてのスペースの規則を採用することは、SPACEインデントレベルごとに4回押す必要があることを意味するものではありません。エディターには、TAB4スペース挿入を押すようにする構成オプションが必要です。

于 2013-01-30T13:09:27.670 に答える
2

これはPythonでよくある問題です。次のアドバイスが役立つ場合があります。

1)スペースとタブを混在させないでください。新しいプロジェクトの場合は、タブではなくスペースを使用してください。PEP8を参照してください。4つのスペースを使用することをお勧めします。

2)混合をより簡単に検出するために、Komodoのタブ長のデフォルト値を変更します。Edit > Preferencesメニューを押してから、 Editor settings

  • チェックを外しますPrefer Tab characters over spaces
  • に4を使用Number of spaces for indent
  • に別の値(たとえば8)を使用するwidth of each tab character

3)のreindent.pyスクリプトは、C:\Python2x\Tools\Scripts\ファイルを適切に再インデントするのに役立ちます

-d (--dryrun)   Dry run.   Analyze, but don't make any changes to, files.
-r (--recurse)  Recurse.   Search for all .py files in subdirectories too.
-n (--nobackup) No backup. Does not make a ".bak" file before reindenting.
-v (--verbose)  Verbose.   Print informative msgs; else no output.
-h (--help)     Help.      Print this usage information and exit.

Change Python (.py) files to use 4-space indents and no hard tab characters.
Also trim excess spaces and tabs from ends of lines, and remove empty lines
at the end of files.  Also ensure the last line ends with a newline.

お役に立てば幸いです

于 2013-01-30T13:37:54.900 に答える
1

他の誰もそれについて言及していないので、コモド自体のすぐ内側に空白を表示する簡単な方法があります。外部ツールを使用する必要はありません。

メニューから[表示/空白の表示]を選択するか、WindowsのキーボードショートカットCtrl + Shift+8を使用します。繰り返してオフに戻します。

[表示]メニューを表示しているときに、他の便利な機能をいくつか確認してください。インデントガイドは特に役立ち、常にオンのままにしておきます。EOLマーカーの表示も時々役立ちます。

于 2013-04-13T08:30:01.217 に答える