python使用变量表示决定路径出错_从其他目录和文件中的python模块访问全局变量时出现问题...

我在使用从其他模块导入全局变量时遇到问题。我确实通过了前面提供的示例答案,但无法解决问题。需要一些方向。

我想使用在utils.commonmodules.py的另一个模块中声明的变量。下面是commonmodules.py和dq_exec.py的代码库。dq_exec.py导入commonmodules.py并尝试使用变量(app_dq_db其中是全局的)

1.commonmodules.py

from utils.cfg import config

from utils.sparkSession import *

from utils.logsession import getloggingSession

import pandas as pd

import subprocess

############### Modules Imported #####################

logger=getloggingSession()

def getDqDefaultConfigParam():

logger.info('Getting all the parameters from Config')

global prc_cntrl_db

global app_dq_db

global dq_grp_config_tbl

prc_cntrl_db = config.get('hive_db_details', 'prc_cntrl_db')

logger.info(script_nm + ' -> prc_cntrl_db :: '+ prc_cntrl_db)

app_dq_db = config.get('hive_dq_config_tbl', 'app_dq_db')

logger.info(script_nm + ' -> app_dq_db :: '+ app_dq_db)

导入上述模块以及其他模块

2. dq_exec.py

from utils.commonmodules import getDqDefaultConfigParam

if __name__ == '__main__':

getDqDefaultConfigParam()

print("prc_name",getDqDefaultConfigParam.app_dq_db)

spark-submit /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py $ {app_id} $ {prc_name} $ {prc_run_id} $ {prc_start_dt} $ {prc_run_dt} $ {params_detl}

Output: I am able to see the values after calling the getDqDefaultConfigParam()but not able to access.

20191220084328 INFO: Line - 80 Getting all the parameters from Config

20191220084328 INFO: Line - 87 /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py -> prc_cntrl_db :: app_gcb_stg

20191220084328 INFO: Line - 89 /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py -> app_dq_db :: app_gcb_stg

20191220084328 INFO: Line - 91 /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py -> dq_grp_config_tbl :: dq_group_config

20191220084328 INFO: Line - 93 /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py -> dq_rule_config_tbl :: dq_rule_config

20191220084328 INFO: Line - 95 /data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py -> dq_grp_config_colList :: ['dq_grp_name','app_id','prc_name','schema_name','table_nm','table_filter']

Traceback (most recent call last):

**File "/data/1/appgcb/bin/dq/spark/gen_dq_check_exec.py", line 110, in

print("prc_name",getDqDefaultConfigParam.app_dq_db)

AttributeError: 'function' object has no attribute 'app_dq_db'**

解决方案

global x意味着x在所有范围内都可用,而不是将其分配为我函数的属性。如果要分配属性,实际上需要一个类。

使用全局变量:

my_module.py:

x = 12

def y():

global x

x = 13

main.py:

import my_module

print(my_module.x)

my_module.y()

print(my_module.x)

output:

12

13

或者,如果您确实需要它作为属性:

my_module.py:

class z:

def __init__(self):

self.x = 13

main.py:

import my_module

my_z = my_module.z()

print(my_z.x)

output:

12

编辑:

因此,对于您的情况,请更换

def getDqDefaultConfigParam():

logger.info('Getting all the parameters from Config')

global prc_cntrl_db

global app_dq_db

global dq_grp_config_tbl

prc_cntrl_db = config.get('hive_db_details', 'prc_cntrl_db')

logger.info(script_nm + ' -> prc_cntrl_db :: '+ prc_cntrl_db)

app_dq_db = config.get('hive_dq_config_tbl', 'app_dq_db')

logger.info(script_nm + ' -> app_dq_db :: '+ app_dq_db)

class getDqDefaultConfigParam_cls:

def __init__(self):

logger.info('Getting all the parameters from Config')

self.prc_cntrl_db = config.get('hive_db_details', 'prc_cntrl_db')

logger.info(script_nm + ' -> prc_cntrl_db :: '+ prc_cntrl_db)

self.app_dq_db = config.get('hive_dq_config_tbl', 'app_dq_db')

logger.info(script_nm + ' -> app_dq_db :: '+ app_dq_db)

getDqDefaultConfigParam = getDqDefaultConfigParam_cls()

在中commonmodules.py。

现在getDqDefaultConfigParam.app_dq_db,您可以使用,就像getDqDefaultConfigParam具有正确属性的类的实例一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值