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

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

新規登録して質問してみよう
ただいま回答率
85.31%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

2回答

576閲覧

【アドバイスをいただけると助かります】Pythonでメール送信する際、本文にプログラム処理結果を入れたい

reda3

総合スコア0

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2023/08/03 00:07

Pythonを、既存プログラムを弄りながら勉強しています。
基本的なことが理解できていない部分もありますが、アドバイスをいただけると助かります。

〇やりたいこと
画像から文字情報を取得し、取得した数値をメールで送信したい

〇現状
画像を解析して、出力した結果を下記の方式で文字として出力することはできている
メール本文に出力結果を変数として入れると、下記エラーが出る

 AttributeError: 'NoneType' object has no attribute 'encode'
→ printで出力した結果は値None, タイプNoneTypeになるからNG?
ほかにどのような方法でアプローチ出来るのかがわからず調査中

〇ソースコード抜粋

・解析結果出力部
def OCR_CNN():

--中略--

res= print( folder[n.argmax()], end=' ',file=f) ← ここの出力結果は各桁の数字を解析した値のうち、
適合率が最も高いものを順番に出力していると認識
(サイトで紹介されていたコードを元にしており理解が曖昧です。。)
return res

・メール添付部

def send_tempmail():
file = config_ini["FILE"]["temp"]
smtp_host = config_ini["MAIL"]["host"]
smtp_port = config_ini["MAIL"]["port"]
from_mail_address = config_ini["MAIL"]["from"]
to_mail_address = config_ini["MAIL"]["to"]
cc_mail_address = config_ini["MAIL"]["cc"]
body = OCR_CNN() #CNN解析結果出力
msg = MIMEMultipart()
#msg = message.EmailMessage()
msg['Subject'] = '数値読み取り結果'
msg['From'] = from_mail_address
msg['To'] = to_mail_address
msg['Cc'] = cc_mail_address
msg.attach(MIMEText(body))

--以下省略--

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

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

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

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

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

y_waiwai

2023/08/03 00:42

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
can110

2023/08/03 06:40

> (サイトで紹介されていたコードを元にしており理解が曖昧です。。) コードが断片的すぎるため - 現象が再現する完全で最小限のコード - そのコードが紹介されていたサイトへのリンク がないと回答を得るのは難しいと思います。
guest

回答2

0

otnさんの指摘と同じ内容です。

基本的なことが理解できていない部分もあります

とあるとおりだと思います。

python

1def OCR_CNN(): 2--中略-- 3 res= print( folder[n.argmax()], end=' ',file=f)解が曖昧です。。) 4 return res

この部分の意図していることは、 printで表示されたものを関数の戻り値として返したいということだと思いますが、間違えています。

res = print(***) と書くということは、print関数の返した値を resに代入していますが、そのprint関数は、プログラムの外(通常は標準出力)に与えられた引数の内容を出力するための関数であって、何も返さない(= noneを返す)ので、resの中身は空になり、結果としてOCR_CNNは空を返しま
す。

printされたものを、関数で返したいのであれば、print関数の中身を返せばいいのです。

python

1 return print( folder[n.argmax()], end=' ',file=f)解が曖昧です。。)

ただし、otnさんの指摘のとおり、それが本来その関数が返すべき内容なのかはわかりません。

投稿2023/08/03 03:54

TakaiY

総合スコア14307

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

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

TakaiY

2023/08/04 08:57

どこが?
guest

0

printで出力した結果は値None, タイプNoneTypeになるからNG?

その通りでしょうね。

ほかにどのような方法でアプローチ出来るのかがわからず

は、

res= print( folder[n.argmax()], end=' ',file=f)

と言う記述で、何をしたかったかに依ります。
ファイルに書いたのと同じ文字列を代入したいのなら、
res = str(folder[n.argmax()])ですかね。
folderが何者か分からないので、str()を付けましたがもともと文字列ならもちろん不要です。

投稿2023/08/03 00:24

otn

総合スコア86295

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

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

reda3

2023/08/03 01:02

回答いただきありがとうございます。 res= print( folder[n.argmax()], end=' ',file=f)の記載についてですが、 別関数で7桁の数字を画像を元に画像解析を行い、学習データのうち最も適合率の高い数字の値を1桁ずつ出力し、各桁で改行が入らないように end=' ’を記載しています。 str()をつけて出力した場合、最後の1桁分の出力のみ反映されるようです。 print( folder[n.argmax()], end=' ') でプログラムを実行した際の結果を見ると、 1234567 という風に7桁の数値として出力されます。 同じ感じで情報を変数でメールに受け渡しができればと思うのですが、何か良い方法があればご教授いただけると助かります。
otn

2023/08/03 01:29 編集

> str()をつけて出力した場合、最後の1桁分の出力のみ反映されるようです。 これは何のことでしょうか? 変数に代入する話でなくて、ファイルに書くという別の話をしていますか? > ファイルに書いたのと同じ文字列を代入したいのなら、 という前提でその次の2行を書いていますが、その前提は正しいのか違うのか、まずそれを書いてもらわないと。
otn

2023/08/03 04:17 編集

> と言う記述で、何をしたかったかに依ります。 という文章の意味が伝わらなかったのですかね。 変数resへの代入の右辺に、print関数呼び出しを書いた意図がなんだったかということです。 推測として「ファイルに書いたのと同じ文字列を代入したい」を書きましたが、合ってるのかどうか。 printの引数の中身については、 > 出力した結果を下記の方式で文字として出力することはできている とお書きなので、期待通りのファイル内容になっていると判断して、問題にしていませんので、end=''の意図など、引数の中身について書いていただく必要は無いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問