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

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

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

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

Q&A

3回答

1610閲覧

elifとelseにinvalid syntaxエラーがでる

umechan2

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/09/18 23:06

編集2021/09/18 23:56

下に示したコードのelifとelseの部分にinvalid syntax とエラーが表示されるのですが,なぜでしょうか.
メールアドレスやパスワードの部分はプライバシー保護のためaaaと表記しています

python

1# ---------------------------------- 2# BTC急上昇・急降下お知らせツール 3# ---------------------------------- 4# 必要パッケージ 5# pip install python-dateutil 6# pip install email 7# ---------------------------------- 8import sys 9import requests 10import time 11import dateutil.parser 12import smtplib 13import email 14from email.mime.text import MIMEText 15from email.utils import formatdate 16from email.header import Header 17 18API="https://api.bitflyer.jp/v1/ticker" 19 20 21#暴騰・暴落の価格差(円) 22chk_yen=50 23 24#スリープ時間(秒) 25sleep_time=60 26 27#★送信元メール 28MY_ADDRESS='aaa' 29 30#★送信元メールパスワード 31MY_PASSWORD='aaa' 32 33#★送信元メールSMTPサーバー 34SMTP_SERVER='aaa' 35 36#★送信先アドレス 37TO_ADDRESS='aaa' 38 39#メール件名 40subject_header="【Bitcoin価格チェック】" 41 42 43# 44#関数:メール送信 45# 46def org_send_mail(from_address,to_address,subject,body): 47 msg=MIMEText(body.encode(charset),"plain",charset) 48msg["Subject"]=Header(subject,charset) 49msg["From"] =MY_ADDRESS 50msg["To"] =TO_ADDRESS 51msg["Date"] =formatdate(localtime=True) 52smtp=smtplib.SMTP(SMTP_SERVER,587) 53smtp.ehlo() 54smtp.starttls() 55smtp.login(MY_ADDRESS,MY_PASSWORD) 56smtp.sendmail(from_address,to_address,msg.as_string()) 57smtp.quit() 58 59 60 61if __name__=='__main__': 62 i=0 63bid_btc=[] 64 65charset="ISO-2022-JP" 66 67#ループ 68while True: 69 updown="" 70 71#APIリクエスト 72res=requests.get(API) 73 74#JSON取得 75json=res.json() 76 77#リストに追加 78bid_btc.append(int(json["best_bid"])) 79 80#タイムスタンプ 81tstr=json["timestamp"] 82 83#JSON形式では直接パース出来ないのでdeteutil使用 84tdatetime=dateutil.parser.parse(tstr) 85 86tdatetime_str=tdatetime.strftime('%Y/%m/%d %H:%M:%S') 87 88if i!=0: 89#価格差取得 90 kakakusa=int (bid_btc[i])-int (bid_btc[i-1]) 91 if kakakusa>0 and kakakusa>=chk_yen: 92 updown=" ↑+"+str (kakakusa)+"円" 93 94#メールタイトル 95subject=subject_header+"急上昇通知 "+tdatetime_str 96 97message_text=tdatetime_str+"\n\nBid:"+"{:,d}".format(bid_btc[i])+"円\n"+str(sleep_time)+"秒前の価格と比較して、"+str(kakakusa)+"円上昇しています。\n\n▼coinmarketcapでBTCチャート確認\nhttps://coinmarketcap.com/currencies/bitcoin/#charts\n\n▼bitFlyerへ\nhttps://bitflyer.jp/ja/\n\n以上" 98 99#メール本文 100body=message_text 101 102#メール送信 103org_send_mail(MY_ADDRESS,TO_ADDRESS,subject,message_text) 104 105 106elif kakakusa < 0 and kakakusa <= chk_yen * -1: 107 updown=" ↓"+str(kakakusa)+"円" 108 109#メールタイトル 110subject=subject_header+"急降下通知 "+tdatetime_str 111 112message_text=tdatetime_str+"\n\nBid:"+"{:,d}".format(bid_btc[i])+"円\n"+str(sleep_time)+"秒前の価格と比較して、"+str(kakakusa)+"円下落しています。\n\n▼coinmarketcapでBTCチャート確認\nhttps://coinmarketcap.com/currencies/bitcoin/#charts\n\n▼bitFlyerへ\nhttps://bitflyer.jp/ja/\n\n以上" 113 114#メール本文 115body=message_text 116 117#メール送信 118org_send_mail(MY_ADDRESS,TO_ADDRESS,subject,message_text) 119 120else: 121updown="" 122kakakusa=0 123pass 124 else: 125updown=""; 126pass 127 128print("["+tdatetime_str+"] BTC_JP Bid: "+"{:,d}".format(bid_btc[i])+"円"+updown) 129 130#スリープ 131time.sleep(int(sleep_time)) 132 133i=i+1

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

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

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

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

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

guest

回答3

0

if  は一回、elifが一回なのに、else が二回あるので文法エラーになっています。
どこを消してelseを一回にするのかは、umechan2さんがやりたいこと次第なので、ご自身で考えてください。

投稿2021/09/18 23:56

ppaul

総合スコア24670

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

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

0

python

1if 条件式: 2 処理1 # 処理1~4は、ifの条件式がtrueの場合に実行する処理 3 処理2  4 処理3  5 処理4  6処理5 7elif 条件式: # <=処理5のせいでifが終わったと思われており、 8       # エラーになる。 9       # 処理5を字下げ、もしくは削除するとエラーにならない 10 11 処理6 # elifの条件式がtrueの場合に実行する処理 12else 13 処理7 # if,elifの両方のの条件式がfalseの場合に実行する処理 14 15処理8 # 処理8はif分の外の処理。if条件に関わらず実行される 16

if分に含まれる処理は、同じ位置に字下げ(左側に同じ個数のスペースを入れる事)して書きます。
上の場合、処理5は字下げしていないので、if分に含まれないとみなされます(が、エラーが出るのはelifの部分になります。)
字下げが終わると、if分の処理は終わります。

図解!Pythonのif文でelse、elifを使った複数の条件分岐

投稿2021/09/22 02:38

tyamzak_

総合スコア95

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

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

0

if i!=0:

kakakusa=int (bid_btc[i])-int (bid_btc[i-1])
if kakakusa>0 and kakakusa>=chk_yen:
updown=" ↑+"+str (kakakusa)+"円"

if のブロックはここまでなのに、そのあとの文でいきなりelifが登場してます
どうやらインデントがむちゃぐちゃのようなので、そこらへんきちんとしないとエラーは解決しませんよ

投稿2021/09/19 06:19

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問