質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.86%

  • Python 3.x

    4803questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pythonにおけるSyntaxError: multiple statements found while compiling a single statement の対策方法を教えてください。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,362

前提・実現したいこと

「たのしいプログラミング pythonではじめよう!」68ページの「お気に入りのサンドイッチ」を解きたいです。

発生している問題・エラーメッセージ

他の原因でエラーが出たため入力をし直したところ、SyntaxError: multiple statements found while compiling a single statementというエラーメッセージが出ました。直前のinvalid syntaxのメッセージの原因はわかっています。

該当のソースコード

ingredients=['snails', 'jobs', 'kindness','pool']
>>> x=1
>>> for i in ingredients:
    print(%s,%s % (x,i))

SyntaxError: invalid syntax
>>> ingredients=['snails', 'jobs', 'kindness','pool']
>>> x=1
>>> for i in ingredients:
    print('%s,%s' % (x,i))

SyntaxError: multiple statements found while compiling a single statement

試したこと

パソコンの再起動とpythonのIDLEの再起動をしました。

補足情報(言語/FW/ツール等のバージョンなど)

言語はpython 3.6.4です。またOSはWindows10の64bitです。

最近pythonを始めたばかりの初心者で、何もわからない状態でレベルの低い質問で申し訳ありません。私のエラーのほとんどがSyntaxError: multiple statements found while compiling a single statementというものなので、このエラーの出る原因、それに対応した一般的な対応方法を教えて頂けると助かります。よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+4

これはIDLEのあるあるではないかと思います。最初自分も同じことで混乱しました。

質問者さんがお使いなのはIDLEのshell画面の方ですね。ここで複数の行をコピーペーストされたのだと思いますが、IDLEのShell画面では複数行に渡るペースはできないようです。この画面は主として「1行ずつPythonの文を入力しながら実行結果を確かめる」という目的に使うと思います。複数行に渡るコードを入力することもできるのですが、あくまで1行ずつ入力しないといけないのですね。

さて複数行のペーストができないと大変不便ですが、そういうことがしたい場合、Shell画面のFile>New Fileででてくる「エディター画面」の方でやるとよいと思います。こちらはエディターなので入力したとたんに実行はされませんがそのかわり何行にもわたるコードを編集しやすくなっています。

エディターの方で複数行のコード(つまりPythonのまとまったプログラム)を入力し、そちらからRun>Run Moduleとしてみてください。実行結果がShell画面の方へ出力されます。また実行が終わった状態でShell画面の方で変数の値などを使って即座に実行なんて使い方ができます。


追記:
Shell画面の機能について少し訂正します。正確には「複数行」のペーストがNGなのではなく、「複数の文を一度にペーストする」のがNGのようです。次の例をご覧ください。(>>>はIDLEのプロンプトです)

>>> def f(a, b):
    return a + 1

                              # <= ペーストした後もう一行空行を入力
>>>                           # <= OK
>>> class MyClass:
    def __init__(self):
        pass
    def method1(self):
        pass
                              # <= ペーストした後もう一行空行を入力
>>>                           # <= OK


関数全体をペーストする場合、例え関数が複数行であっても「一つの関数定義なら」OKみたいですね。同様に「一つのクラス定義なら」例えその中に複数のメソッドが定義されててもOKです。

一方、以下のように複数の文を一度にペーストするとNGです。

>>> a = 1
b = 1
                              # <= ペーストした後もう一行空行を入力
SyntaxError: multiple statements found while compiling a single statement
>>>

関数定義やクラス定義が一つの文というのはピンとこないかも知れませんが、Pythonがインタープリタ言語であり、関数定義やクラス定義は全体で一つの実行文であると考えれば納得できる仕様かなと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/08 01:06

    回答ありがとうございます。KSwordOfHaste様がおっしゃっているのは「shellのほうで複数行をコピーペーストしたことが原因であり、コピーペーストしてインデントなどを修正したうえでプログラムをエディタ経由で行えば問題ない」ということなのでしょうか。

    キャンセル

  • 2018/01/08 01:35

    少し追記しました。複数の文はShell上へはペーストすること自体がNGですね。Shell上で実行したいなら「一つの文ごとにペースト」してください。プログラム全体をペーストするような場合は最初の回答に書いたようにエディター画面へペーストしましょう。

    キャンセル

  • 2018/01/08 01:47

    多分これはPythonのIDLEの仕様だと思います。同じPythonのREPL(Real Eval Pring Loop機能)でも例えばコマンドプロンプトから
    python -i
    のようにしてインタラクティブモードでPythonインタープリタを起動した場合は複数の文をペーストできますね。またPyCham(PythonのIDEの一つ)でPython consoleというREPLが用意されてますが、そこでもOKでした。

    キャンセル

  • 2018/01/09 14:46

    ありがとうございます!解決しました!

    キャンセル

0

Pythonでは、ブロックに字下げが必要です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/07 17:07

    字下げされていないように『見える』だけだと思いますし、
    それが直接的原因ならばIndentationErrorが出るはずです。

    キャンセル

  • 2018/01/07 17:11

    なるほど、了解です。

    キャンセル

  • 2018/01/07 17:21

    https://m.chiebukuro.yahoo.co.jp/detail/q13151611118
    https://stackoverflow.com/questions/18771573/multiple-statements-found-while-compiling-a-single-statement
    ベストアンサーに選ばれた過去があるようです。

    キャンセル

  • 2018/01/07 17:41

    前者はそもそもインデントが潰れてしまっているので当てずっぽうな印象を受けます。
    後者もインデントの話に終始していますが、それなら先にIndentationErrorが出るような。

    インデントに気を使って一括ペーストを避けた結果、副次的にエラーが解消したのでは。

    キャンセル

  • 2018/01/07 17:48 編集

    おっしゃるとおりかもしれませんね。
    インタラクティブモードでは、IndentationErrorが出るか、正しいインデントだと正常に実行されますね。
    IDLEにして一括ペーストしたときにエラーを再現できました。

    Windows特有の振る舞いを疑いましたが、KSwordOfHasteさんの回答が的を射ている気がします。

    キャンセル

  • 2018/01/08 01:09

    みなさん、ありがとうございます。今回はインデントなどは気を付けて修正したつもりですが今後改めて注意したいと思いました。

    キャンセル

0

https://teratail.com/questions/93804

syntax error は、何かコードの書式に不備があったときに発生するエラーです。やみくもにシステムの再起動などやっても何の意味もありません。
エラーがでたらエラーメッセージ丸ごとをgoogleに入れて検索してみればたいてい答えが見つかります。このときエラーメッセージを””でくくってあげるのがコツです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/08 01:07

    ありがとうございます。一応インターネットで調べてはみたのですが、日本語ではなかなか見つからなかったので質問させていただきました。""でくくるといい、というのは初めて知りました。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    4803questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。