前提・実現したいこと
Python使用
外部ファイルの関数にてcsvを読み込み、その中身を変数に格納してreturnの戻り値として元ファイルに返したいです。
発生している問題・エラーメッセージ
CONFIG_allがNoneとなり何も返ってきません。
CONFIG_〇〇内には正しい値がある状態です。
該当のソースコード
Python
1from function import initial_setting as iset 2 3CONFIG_all = iset.read_config()
Python
1def read_config(): 2 3 ###dir取得・移動 4 import os 5 os.getcwd() 6 #print(getdir) 7 os.chdir("C:\Users\〇〇") 8 #os.chdir("..\config") 9 10 import pandas as pd 11 12 ###configファイルの読み込み 13 config_table = pd.read_csv("config/config.csv",encoding = "shift_jis") 14 15 ### config変数の作成 16 #config_cnt = len(config_table) 17 18 CONFIG_str = ['CONFIG_data_dir','CONFIG_data_column','CONFIG_time_column','CONFIG_request_url','CONFIG_sas_token'] 19 20 for i in range(len(CONFIG_str)): 21 exec('{} = "{}"'.format(CONFIG_str[i],str(config_table.loc[i,"Value"]))) 22 23 return (CONFIG_data_dir,CONFIG_data_column,CONFIG_time_column,CONFIG_request_url,CONFIG_sas_token)
試したこと
CONFIG_data_column,CONFIG_data_dir,CONFIG_time_column,CONFIG_sas_token,CONFIG_request_url = iset.read_config()や return(CONFIG_data_column)にしてCONFIG_data_column= iset.read_config()等試しましたがNoneのままでした。
各CONFIG_〇〇の値を元ファイルに返すにはどうすれば良いでしょうか。
補足情報(FW/ツールのバージョンなど)
Python 3.8
Spyder 4.2.5
ここにより詳細な情報を記載してください。
return直前の各変数の値はどうなっていますか?
read_config()の中身のみ(importからfor分まで)を実行した場合は、各変数に正しい値が入っている状態です。
しかし、main.py側で
from function import initial_setting as iset
CONFIG_all = iset.read.config()
のみを実行すると、 NameErrror: 'CONFIG_data_dir' is not definedとなってしまいました。
initial_setting.pyが複数あって、違う方を読んでいるということはないですか?
functionフォルダ内にはinitial_setting.pyは一つしかないので、別のpyを読んでいるということは無いと思います…
main.py を実行したとき、 質問では、Noneとなるとありますが、2つ前では、エラーになると書いてあります。
提示されているコードは同じようですが、どちらが正しいでしょう?
また、ppaulさんの指摘の通り、違うファイルを読んでいたりしそうですので、ディレクトリとファイルの構成の情報も提示いただけるといいと思います。
いずれにしても、提示されているread_config()関数が本当に呼ばれているのであれば、Noneは返らないはずです。
TakaiYさん
pythonの変数エクスプローラにNone object?の様な記載があったためNoneと書いてしまいました。
実際はNameErrrorが正しいです。
また、外付けSSDにファイルを移して実行すると何故かうまくいったのでみなさんがおっしゃる様に違うファイルを読んでいるかもしれません。元のディレクトリ構成がおかしくないかもう一度確認してみます…。
うまくいった際の構成は、↓になります
F:\Work\1_Soft\○○\Python\devPC\DataConnect\main
|-main.py
|-main_run.bat
|-config
| |-----config.csv
|-function
| |-initial_setting.py
| |-monitoring_update.py
| |-read.files.py
| |-request_http.py
|
|-header
| |-header.csv
|
|-log
まずはファイルを分けずに、main内にすべての処理を書いて、うまく動作することが確認できてからファイルを分割してもよいかもしれません。
そうすれば、処理が間違っているのか、ファイル分割の仕方が間違っているのか、どっちが問題なのかが一発でわかると思いますよ。
あなたの回答
tips
プレビュー