[英]Python calling a function from different module using a variable defined in current module
helpers目錄中有一個名為helper_a.py的模塊。 它具有此處定義的所有類和功能。
現在,我想從這里調用一個函數到另一個模塊(不在helpers目錄中),而是向后一個步驟(cd ..)。 ( init .py)在helpers目錄中。
代碼和錯誤如下:
from helpers.helper_a import *
import pandas as pd
query_train_data = "select * from train;"
df_train_dataset = pd.read_sql(query_train_data, con=engDps1000)
query_test_data = "select * from test;"
df_test_dataset = pd.read_sql(query_test_data, con=engDps1000)
df_train_data = df_train_dataset
df_test_data = df_test_dataset
data_prep_steps() # This function is defined in helpers_a
Error:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-12-3c88b46f341a> in <module>
----> 1 data_prep_steps()
~\Desktop\Notebooks\helpers\helper_a.py in data_prep_steps()
---> 89 # STEP 1 : CONVERT REQUIRED COLS TO CATEGORIES
90 for df_name in [df_train_data, df_test_data]:
91 data_prep_class = data_prep(df_name)
NameError:名稱“ df_train_data”未定義
問題是變量df_train數據是在當前模塊中定義的,我想通過在當前模塊中也調用它來在helpers_a中定義的函數中使用它,但是為什么它不能識別此變量?
注意:也嘗試分配全局變量狀態,但仍不能解決問題
有一種在其他模塊中創建不存在的屬性,方法或函數的解決方案。 它來自單元測試。
from unittest.mock import patch, PropertyMock
from helpers.helper_a import *
import pandas as pd
query_train_data = "select * from train;"
df_train_dataset = pd.read_sql(query_train_data, con=engDps1000)
query_test_data = "select * from test;"
df_test_dataset = pd.read_sql(query_test_data, con=engDps1000)
df_train_data = df_train_dataset
df_test_data = df_test_dataset
with patch('helpers.helper_a.df_test_data',create=True,new_callable=PropertyMock) as df_test_data_mock: #Create tells to create attribute if it does not exist
with patch('helpers.helper_a.df_train_data', create=True, new_callable=PropertyMock) as df_train_data_mock: # PropertyMock is used to mock properties
df_test_data_mock.return_value = df_test_data
df_train_data_mock.return_value = df_train_data
data_prep_steps() # This function is defined in helpers_a
盡管我同意這樣的觀點,即傳遞這些值會更簡單。 同樣由於python動態特性,您只需在模塊本身上設置這些屬性即可。 此方法更簡單,但是您需要記住在完成之前哪種方法對上下文有害的情況后進行清理。
import helpers.helper_a
import pandas as pd
query_train_data = "select * from train;"
df_train_dataset = pd.read_sql(query_train_data, con=engDps1000)
query_test_data = "select * from test;"
df_test_dataset = pd.read_sql(query_test_data, con=engDps1000)
helpers.helper_a.df_train_data = df_train_dataset
helpers.helper_a.df_test_data = df_test_dataset
helpers.helper_a.data_prep_steps() # This function is defined in helpers_a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.