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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

3465閲覧

Python3で条件分岐のコードを書きたいのですが、else:の後に改行すると文法エラーになります。どうしたらよいですか?

ponta7257

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2018/04/18 10:26

編集2018/04/18 10:38

前提・実現したいこと

if文の条件分岐で、else:まで書いて改行すると、文法エラーになります。
インデントが問題であるとは思うのですが、どのようにしたら揃えられるのかが分かりません。
ちなみに使ってるのはIDLEです。Windowsで利用しております。

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

SyntaxError: invalid syntax

該当のソースコード

Python3

1>>> disaste=True 2>>> if disaste: 3 print("Woe") 4else: 5

if文の中にelseなどを含めて改行。

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

hoge01👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2018/04/18 11:54

実行手順を追記ください。ターミナルから(「python」または「ipython」を実行?)
guest

回答3

0

私も知らなかったエラーなので、勉強になりました。

以下に分かったことなど書きます。参考に。
(私はiPython使いなのですが、同じ対話型のIDLEでも同じで、説明がつくと思います)
あと解決法、というか回避法も書いておきます。


回答 「どのようにしたら揃えられるのかが分かりません」 
どうやっても無理です。私はそう思います。

原因 たぶんPythonインタプリタの仕組み上、IDLEでもiPythonでも
if文はEnter押しで確定され、構文が文法解釈され、誤りとみなし
「SyntaxError: invalid syntax」を返してしまうからだと思います。

この場合
ELSE: をインテンドを意識し整形して

Python

1if disaste: 2  print("Woe") 3else: 4```として「Enter」を押しても、インタプリタが 5if disaste:からelse:までを解釈し、 6 7**else:文の「実行部」がない** 8 9と判断するのだと思います。  10 11> 【追記:21時38分】 12>if disaste:からelse:までを解釈し、**else:文の「実行部」がない**13> は間違いです。 14>  正しくはこの回答についた、can110様のコメントをご覧下さい。 15 16![イメージ説明](7ccaf9d9044582c4f0b7471795038e80.jpeg) 17 18--- 19 20回避法 21 22**iPython**での回避方法です。 23 24あらかじめ動かしたいPythonの構文を作成しておき、これを選択してコピー(Ctrl+C)。 25次に @paste[ENTER] を実行すると最後まで解釈され、 26問題なく実行されます。 27 28上のような問題が起きません。 29 30参考 31ttps://stackoverflow.com/questions/38997873/else-not-working-in-ipython 32 33![イメージ説明](00b2d13412a5568056eb2f3d06b91ca7.jpeg) 34![イメージ説明](230ebd90cc8589dc8d79dc4598532262.jpeg)

投稿2018/04/18 11:33

編集2018/04/18 12:39
kawakawa2018

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2018/04/18 11:53

なるほど、ipythonのオートインデントによって再現しますね。 通常のREPLだとオートインデントされないので再現しませんでしたが。 ちなみにsyntax errorの原因は「else:に対応するif:が存在しないため」だと思います。 また、回避方法としては勝手に入った「 else:」の先頭4つの空白をバックスペースキーで削除で大丈夫です。
kawakawa2018

2018/04/18 12:10

can110 can110 can110 can110 can110 can110 can110 can110様 はじめまして 「else:に対応するif:が存在しないため」  ここが私はいまいち不明、理解し切れていません。 ですのでお尋ねしたいのですが これは >>> disaste=True >>> if disaste: print("Woe") else: において >>> disaste=True >>> if disaste: print("Woe") if (条件): ←これがない else: を意味していますでしょうか?
kawakawa2018

2018/04/18 12:13

ponta7257様、 can110様 1つ前のコメントですが、 すいません、PCのブラウザの調子が悪く 先頭がおかしくなってしまいました。
can110

2018/04/18 12:18

より正確にはifの次の行にpassなどの処理文が必要ですが、その理解でよいです。 つまり↓のようなコードならOKです。 ※コメント欄ではインデントが効かないため「 」を「_」に置換しています。 if_disaste: ____print("Woe") ____if_'この行が↓のelseに対応していればよい。': ________pass ____else: ________#ここにカーソルがあり、正常。
kawakawa2018

2018/04/18 12:31

can110様 「passなどの処理文が必要」 おお、確かにそうですね。 かなりPythonの文法の復習になりました。 「※コメント欄ではインデントが効かない」 お手数おかけします。 #確かに、コメント欄は使いづらいですね。 ここは改善してほしいですね (私は、今回のようにあえて回答欄に書いています)
can110

2018/04/18 12:47

kawakawa2018さんの回答のとおりだと思いましたのでこの回答は控えましたが そもそも「コメント欄ではインデントが効かない」のは コメント欄でごちゃごちゃ言わずに回答してね!との運営側の意図を感じます^^;
kawakawa2018

2018/04/18 12:54

「コメント欄でごちゃごちゃ言わずに回答してね!との運営側の意図を感じます^^;」 そうですか、のせられちゃいましたね(←冗談!) 私、実は数日前にこのシステムを利用し始めたのです が、いろいろありますね。。。 分かりやすく回答をつけてあげたい、と思いながら こちらを利用しています。今後もそうします。 (この位で、私も運営に関する回答は止めます)
guest

0

1つ前の私の回答にある
コメントへの追加内容です。


「回避方法としては勝手に入った「 else:」の先頭4つの空白をバックスペースキーで削除で大丈夫です。

iPythonではさっき試して問題なく、実行できました。
イメージ説明


can110様へ

そうですよね。
自分も最初この質問を見たとき、何が問題なのか不思議でした。
もしかして質問者の方、固有の問題と
思っていました。

ところがさっき再現するか確認したら、
数回試して同じエラーがでたので、
あせりました。

投稿2018/04/18 12:26

kawakawa2018

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

???elseを同じ行に書いているからでは?

Python

1>>> if True: 2... pass 3... else: 4... pass 5...

Win10ですが、再現しませんでした。
win10

投稿2018/04/18 10:31

編集2018/04/18 12:14
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponta7257

2018/04/18 10:33

ごめんなさい。質問段階でのコード表示が間違っておりました。 if disaste: print("Woe") else: ↑のような記述で改行すると文法エラーになります 申しわけないですが、再度考えていただきたいです。お願いします。
LouiS0616

2018/04/18 10:35

コメント欄では行頭の空白が潰れてしまうので、質問本文を編集してください。
LouiS0616

2018/04/18 10:48

いちおう確認しておきますが、『>>>』は自動的に表示されたものであって、ponta7257さんが自分で打ち込んだりしていませんよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問