Python - 予期しないインデントとその他のエラー

okwaves2024-01-25  9

class Pacco:
    STATES = ('Il pacco e` stato ordinato ma non ancora spedito',
              'Il pacco e` stato spedito ma non ancora ricevuto',
              'Il pacco e` stato ricevuto')
    indice = 0
    
    def __init__(self):
        self.state = Pacco.STATES[0]
        self._succ = Pacco.STATES[1]
        self._prec = None

    def next(self):
        print(self.state)

    @property
    def state(self):
        Pacco.indice += 1
        self.state = Pacco.STATES[Pacco.indice]
        self._succ = Pacco.STATES[Pacco.indice+1]
        self._prec = Pacco.STATES[Pacco.indice-1]

indice = 0 では「Unexpected indent」というエラーが発生し、行 Pacco.indice += 1 ではエラーが発生します。

Unindent does not match any outer indentation level

次の 3 行でエラーが表示されます

Unresolved reference 'self'...

誰か理由を教えてもらえますか?

Python 2 を学習していますか?可能であれば、代わりに Python 3 を学習することをお勧めします。Python 2 は 2020 年の初めに EOL になり、いずれにしても 3 の方がずっと優れています。ところで、SO へようこそ!ツアーと、アドバイスが必要な場合の質問方法をご覧ください。

– ウィジャンドレア

2020 年 9 月 5 日 1:38



------------------------

タブとスペースが混在しています。すべてのタブをスペースに変換すると (PEP 8 に従って)、構文は正常に機能します。

注: Stack Overflow フォーマッタはタブを 4 つのスペースに変換するため、投稿では確認できませんが、ソースを確認すると確認できます。

1

タブをスペースに置き換えたら問題は解決しました。ありがとう

– user14223968

2020 年 9 月 5 日 1:36



------------------------

まず、事前定義された変数をすべて __init__ 関数内に保持します。次に、同じ名前の関数があるため、self.state 変数は self._state である必要があります。第三に、タブとスペースの書式設定に関するアドバイスについては、@wjandrea の回答を参照してください。コードは次のようになります:

class Pacco:
    
    def __init__(self):
        self.STATES = ('Il pacco e` stato ordinato ma non ancora spedito',
                       'Il pacco e` stato spedito ma non ancora ricevuto',
                       'Il pacco e` stato ricevuto')
        self.indice = 0
        self._state = self.STATES[0]
        self._succ = self.STATES[1]
        self._prec = None

    def next(self):
        print(self.state)

    @property
    def state(self):
        self.indice += 1
        self._state = self.STATES[self.indice]
        self._succ = self.STATES[self.indice+1]
        self._prec = self.STATES[self.indice-1]

2020 年 9 月 5 日 1:32 に回答

ニューオプス

ニューオプス

342

3

銀バッジ 3 個

16

16 個の銅バッジ



------------------------

autopep8 を使用できます

pip install autopep8

ここで autopep8 <yourfile.py> と入力します。ターミナルに入力して

コードが正しい方法でフォーマットされることを確認してください

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。