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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

301閲覧

例外処理の関数化 try exception

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/15 13:43

編集2022/01/12 10:55

お世話になります。
python初心者になります。おそれいりますが質問させて頂きます。

実施したい事は3つになります。

. エラー処理の関数を作成したい。 tryの内容は全て異なる。

. エラーの内容をcsvへ出力したい。

. try文を外から引数で呼び出して実行したい。

例外処理を実施した際、エラーになった場合にエラー内容をcsvに出力させたいです。
例外処理は複数あり10個以上あり、様々なエラーが考えられます。
毎回tryとexceptionをコーディングするのもステップ数が増える為、削減したいです。例外処理についても関数で呼び出したいと考えております。
お手数をおかけしますがよろしくお願いします。

ためしたこと

csv出力

def create_csv(csvname,variable_field): setfilename = csvname + '.csv' # with open(setfilename, 'a', newline='') as f: before vietnam with open(setfilename, 'a', encoding='utf-8', newline='') as f: writer = csv.writer(f) # 時間を取得する為に、まず全ての日時間を取得する for_write_time = datetime.datetime.now() # 2018-05-14 09:59:07.812884 fixed_field = ["date", datetime.date.today(), "hour", "{}:{}:{}".format(for_write_time.hour, for_write_time.minute, for_write_time.second), 'microsecond',for_write_time.microsecond] #print("variable_fieldの型は",type(variable_field)) #list リスト型の場合 if isinstance(variable_field,list): # print("csv-outpiut:list ",type(variable_field)) writer.writerow(fixed_field + variable_field) # 固定項目+可変項目 #dict 辞書型の場合 elif isinstance(variable_field,dict): # print("csv-outpiut:dict ",type(variable_field)) lst = [] for e in variable_field.items(): lst.extend(e) # print("lst :",lst) writer.writerow(fixed_field + lst) # 固定項目+可変項目 #タプル型の場合 elif isinstance(variable_field,tuple): # print("csv-outpiut:tuple ",type(variable_field)) listed_var = list(variable_field) writer.writerow(fixed_field + listed_var) # 固定項目+可変項目 else: print("csv-outpiut:other ------------------e-r-r-o-r-e-r-r-o-r-e-r-",type(variable_field))

例外処理

#Main 例えば error("Sample1 = hogehohe.hoge(TARGET_hoge)"): error("ここに異なるtry命令 このような例外処理が10個以上あります"): def error(content) # 例外処理 try: content #??? Sample1 = hogehohe.hoge(TARGET_hoge) #処理を実施するこの部分は例外処理毎に毎回異なります。ここではサンプルを記載します。 except Exception as error_info: print(error_info) create_csv("error",error_info)

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

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

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

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

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

guest

回答1

0

try exceptについてはこういうイメージでしょうか?文字列で渡されたコードを実行するのであればexecが利用できます。

In [42]: def error(content): ...: # 例外処理 ...: try: ...: exec(content) ...: except Exception as error_info: ...: print(error_info) ...: In [43]: In [43]: data = [] In [44]: error('data.append(1)') In [45]: data Out[45]: [1] In [46]: error('print(data[0])') 1 In [47]: error('print(data[1])') # 要素外なので例外が発生するがキャッチされている list index out of range

ただ、コード部分を文字列で引き渡すのはデバッグし辛いですしデメリットも多いのであまりお薦めはできませんが・・・

投稿2018/06/15 15:05

denzow

総合スコア640

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 15:14

ありがとうございます。例えば10個のcontentsがあったとします。それぞれ実行文が複数ある場合、exec(content)の下に書きたいのですが、関数として利用したい為かけません。こういうときはcontentsを配列型にすればいいのでしょうか
hayataka2049

2018/06/15 15:19

スコープが絡んだ瞬間大爆死する予感・・・ def hoge(s):   exec(s) def main():   hoge("h=123")   print(h) # 結果は言わずもがな if __name__ == "__main__":   main()
退会済みユーザー

退会済みユーザー

2018/06/15 15:23

やめます。はぁ毎回書くのか
hayataka2049

2018/06/15 15:25 編集

上のコメントにdenzow様を貶す意図はありません。「デメリットも多いのであまりお薦めはできませんが」とちゃんと書いておられることですし。ただ、こういう方針を取るのは無茶だということは質問者様に伝えておくべきと思い、コメントさせていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問