昨日紹介した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リマインダーに転記するというタスクを登録した。
スマホのリマインダーも登録だけしてちゃんと確認・消し込むということががなかなか定着しなかったけど、これで解決できると思う。
また、土日は終日リマインドを有効にしたいのでスケジューラーのトリガーを複数にして平日と休日でリマインド時間帯を分ける修正も行った。
以上。