try: except: でエラーをキャッチしたい (Runtimewarning)

実現したいこと

try except でRuntimewarning をキャッチしたいが、できない。

前提

・gmo apiを用いて株価を取得するtaskを定義し、スケジュールで1分ごとに回しています。

・特定のタイミング(例えば証券会社の日付が切り替わる午前7時など)に、株価の表が白紙に戻るため、表の中身を処理する部分が、表データが少なすぎて(白紙なので)、エラーが出ます。

・そのエラーをキャッチして15分待機したいです。

エラーメッセージ(1秒ごとにこれが出ます)

/home/uta/ダウンロード/fx/TRADE api4.py:191: RuntimeWarning: Mean of empty slice. h987 = h[6:9].mean() /home/uta/.local/lib/python3.10/site-packages/numpy/core/_methods.py:131: RuntimeWarning: invalid value encountered in scalar divide ret = ret / rcount /home/uta/ダウンロード/fx/TRADE api4.py:195: RuntimeWarning: Mean of empty slice. l987 = l[6:9].mean()

該当のソースコード

python

1import pandas as pd 2import datetime as dt 3import pandas_datareader.data as web 4import matplotlib.pyplot as plt 5import numpy as np 6import time 7import schedule 8import requests 9import json 10 11def task():12 ##### 為替データの取得 #####13 now = dt.datetime.now() - dt.timedelta(hours=6)14 D = now.strftime('%d')15 M = now.strftime('%m')16 today = str(now.year) + M + D 17 18 endPoint = 'https://forex-api.coin.z.com/public'19 path = '/v1/klines?symbol=USD_JPY&priceType=ASK&interval=1min&date='+today 20 response = requests.get(endPoint + path)21 22 df = pd.DataFrame(response.json()['data'])23 df['openTime'] = pd.to_datetime(df['openTime'].astype(int), unit='ms')24 df = df.set_axis(['Date time', *df.columns[1:].str.title()], axis=1)25 df.iloc[:,1:] = df.iloc[:,1:].astype(float) # 追加26 27 h = df.iloc[-11:-1, 2].values[::-1]28 h321 = h[:3].mean()29 h654 = h[3:6].mean()30 h987 = h[6:9].mean()31 l = df.iloc[-11:-1, 3].values[::-1]32 l321 = l[:3].mean()33 l654 = l[3:6].mean()34 l987 = l[6:9].mean()35 # -11:-1 は最終行(-1)の10行前(-1-10=-11)から1行前(-1-1=-2)。36 # values[::-1] は逆順。37 # h = [1分前のHigh, 2分前のHigh, 3分前のHigh, ..., 10分前のHigh]38 print(h321,h654,h987,l321,l654,l987)39 40 41 42schedule.every().minute.at(':05').do(task)43 44while True: 45 try: 46 schedule.run_pending()47 time.sleep(1)48 49 except RuntimeWarning as rw: #この際に15分待機して、表データが揃ったら処理を再開したい50 now = dt.datetime.now()51 print(now,'RuntimeWarning:',rw)52 time.sleep(900)53

試したこと

chatgptに聞いたところ、import warningsを1行目に追加したコードがおくられましたが、全く同じエラーが出てキャッチしてくれませんでした。

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

Ubuntu 22
python 3

コメントを投稿

0 コメント