t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

pythonリマインダーにエラーハンドリングを追加

昨日紹介したpythonリマインダーについて、エラ―処理を追加したのでご紹介。
thom.hateblo.jp

元のコードがファイル名の日付書式に頼ってリマインドを実行する都合上、ファイル名の入力ミスで正しく日付を読み取れないとpythonエラーにより処理を停止してしまう。

コマンドで実行していればエラーが見えるが、今回のようにスケジューラーで黒画面を出さない場合は何も起きずにエラーに気づくことが無い。
これではリマインダーとしてイマイチなので、エラー処理を追加した。ついでにtasksフォルダが無いケースやiconファイルが無くなったケースなど考えうるシチュエーションをカバーした。

import os
import glob
from datetime import datetime as dt
from plyer import notification


base_path = os.path.dirname(os.path.abspath(__file__))
files = glob.glob(os.path.join(base_path,"tasks\*"))
cnt = 0
err = 0
for file in files:
    str_task_time = os.path.basename(file)[0:16]
    try:
        task_time = dt.strptime(str_task_time, "%Y_%m_%d_%H_%M")
        if dt.now() > task_time:
            cnt += 1
    except:
        err += 1


notify_title = "ERROR"
notify_message = "不明なエラー"

if not os.path.exists(os.path.join(base_path,"tasks")):
    err += 1
    notify_message = "tasksフォルダが存在しません。\n"+base_path+"を確認してください。"
else:
    if err > 0:
        notify_message = "タスクファイル名の日付書式を確認してください。\n"+base_path+r"\tasks"
    else:
        if cnt > 0:
            notify_message = str(cnt)+" 個の期限切れタスクを処理してください。\n"+base_path+r"\tasks"

icon_path = os.path.join(base_path, "notify.ico")
if not os.path.exists(icon_path):
    err += 1
    icon_path = None
    notify_message = "notify.icoが見つかりません。\n"+base_path

if err == 0:
    notify_title = "Reminder"

if err+cnt > 0:
    notification.notify(
        title=notify_title,
        message=notify_message,
        app_name="Py Notify",
        app_icon=icon_path,
        timeout=10
    )

あと外出先で何か追加したいリマインダーを思いついた場合にどうするか悩んだけど、これはスマホのTo Doリストアプリを使い、pythonリマインダーの方にはスマホからpythonリマインダーに転記するというタスクを登録した。

スマホのリマインダーも登録だけしてちゃんと確認・消し込むということががなかなか定着しなかったけど、これで解決できると思う。

また、土日は終日リマインドを有効にしたいのでスケジューラーのトリガーを複数にして平日と休日でリマインド時間帯を分ける修正も行った。

以上。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。