タイトルが弱冠難しい表記となりましたが、ある処理でエラーと認識したら、以降の処理を停め ユーザ側に制御を戻したいだけです。
クラスのメソッド内で 処理を中断・ユーザ側に制御を戻すには どういう対策をとるべきなのでしょうか
自分は今回 exit() を記載したわけですが、停まるどころか 「Message=None」というエラーを招きます。
クラスの中の一つのメソッド
python
1 def send_Mail(self, toaddress, subject, body, parent): 2 try: 3 message = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" % (self.mlsrv_fraddress, toaddress, subject, body)) 4 5 smtp = smtplib.SMTP(self.mlsrv, self.mlsrv_port) 6 smtp.login(self.mlsrv_id, self.mlsrv_pw) 7 result = smtp.sendmail(self.mlsrv_fraddress, toaddress, message) 8 except Exception as e: 9 tkmb.showerror("Abort", e, parent=parent) 10 exit() #★★★エラーになる、ユーザに制御を返すことを希望するも
クラスを生成してメソッドを利用している側
python
1def test_Send(event=None): 2 if tkmb.askyesno("Confirmation","This mail will be sent to the address you specified at the field." + "\r\n===> " + self.ts_txt5.get(), parent=self.this): 3 test = email() 4 test.testsetting(self.ts_txt1.get(), self.ts_txt2.get(), self.ts_txt3.get(), self.ts_txt4.get(), self.ts_txt5.get()) 5 6 #上記メソッドの呼出し、★失敗の場合、次のステップにいかないことを希望!!!★ 7 test.send_Mail(self.ts_txt5.get(),"+++ This mail was sent from you for a test!! +++ ", self.ts_scrtxt1.get('1.0', 'end -1c'), self.this) 8 9 #正常終了を伝えるメッセージボックス、上記が失敗したらここまで来てほしくない 10 tkmb.showinfo("Result","Finished !", parent=self.this)
クラスの全容を掲載しませんでしたが、概要は以下のとおり。
メールの送信機能をクラスとして作成しました。
予め設定しておくメールサーバから都度指定されるメールアドレス・件名・内容をメール配信することを主の役割に作成しました。
先に記述した、「予め設定しておく」が整っていない状態でも、メール系初期設定画面で テスト送信にも用いれるよう作成したつもりです。
尚、以下のようにメソッド内の根幹動作部分に 結果を変数resultに収めるようしているので この戻り値を呼び出し側で判断する方法も考えたのですが
一先ずprintで変数の内容を確認するとUnboundLocalError: local variable 'result' referenced before assignment という事象を招き
これでは使えない、と思い断念しました。(別案件掲載している全角文字を含むメールでテスト:動作結果を変数に得るまえにコけている?!)
python
1result = smtp.sendmail(self.mlsrv_fraddress, toaddress, message)
回答1件
あなたの回答
tips
プレビュー