発生している問題・分からないこと
以下のapp.pyを実行するとFlaskサーバーが立ち上がると仮定します。そこでx.pyの関数で使われているAPIkeyが不正だった場合、ログには以下のエラーメッセージが表示されるだけで、API関連のエラーだということが読み取れません。一応、以下の「試したこと」の方法で「以下のエラーメッセージ」に加えて「API関連のエラーだということその詳細(ファイル名や行数)」を表示させることはできましたが、もっと最適なコードの書き方はないでしょうか?
エラーメッセージ
imageURL, explain = X()
TypeError: cannot unpack non-iterable NoneType object
試したこと
x.pyの関数に「例外処理を加えてHttp errorをキャッチさせる」という機能と「tracebackモジュールで詳細の場所も表示させる」という機能を加えてapp.py稼働時のログに表示させた。
コード
Python
1--------- 2app.py 3--------- 4from x import X 5 6# Flask稼働中に実行される 7imageURL, explain = X()
Python
1--------- 2x.py 3--------- 4# APIを使ってimageURL, explainを取得して返す 5def X(): 6 res = request.get(http://exsample) 7 jsondata = res.json() 8 imageURL = jsondata['imageURL'] 9 explain = jsondata['explain'] 10 return imageURL, explain
Python
1Deepl_APIkey = os.getenv('Deepl_APIkey') 2 3def translate(source_txt): 4 try: 5 params = {'auth_key': Deepl_APIkey, 'text': source_txt, 'source_lang': 'EN', "target_lang": 'JA'} 6 deepl_response = requests.post("https://api-free.deepl.com/v2/translate", data=params) 7 deepl_response.raise_for_status() 8 deepl_json = deepl_response.json() 9 translated_text = deepl_json['translations'][0]['text'] 10 translated_text = translated_text.replace("。", "。\n" + os.linesep) # 自動改行 11 translated_text = translated_text.rstrip(os.linesep) # 最後の改行を削除 12 return translated_text 13 14 except HTTPError as h: 15 if '403' in str(h) or '404' in str(h): 16 print(f'=== APIKeyまたはendpointを確認してください ===\n{h}\n{traceback.extract_tb(h.__traceback__)[0]}') 17 else: 18 print(f'=== HTTPError ===\n{h}\n{traceback.extract_tb(h.__traceback__)[0]}') 19 except RequestException as re: 20 print(f'=== その他のエラーが発生しました ===\n{re}\n{traceback.extract_tb(h.__traceback__)[0]}')
回答1件
あなたの回答
tips
プレビュー