mfc控件变量在自定义函数引用出错_Python引用自定义模块时全局变量问题

2e122e7602c18f2fbe2a2e9707650d24.png

问题描述:

在某个项目中自定义了一个mysql数据查询的模块,前期这个模块想着比较简单,然后该模块没有使用类来定义,只是使用了几个简单的函数,这就为修改时埋下了巨坑;

最开始这个mysql的模块只有一个查询函数,后面由于项目的不同查询需求,又定义了几个查询的函数,最开始写的时候,为了简单方便,直接就把pymysql中的连接以及游标的建立均放在了函数里面

b93c1270a7e0ff42f5d78676686223e6.png

问题分析:

最近数据库那边修改了数据库的密码,然后想着有几个函数均需要改密码,就把数据库连接的几个字段放在了一个常量的配置文件,同时在数据库的模块中把数据库的连接建立作为全局变量,修改成这样

76863ad1bf8183ec449083959f6bcb46.png

3ca73d70e0f27c9ced966e7e6d33493c.png

修改完成之后先在数据库模块中运行,运行结果正常,但是在另外的模块引用这个模块时,一直提示数据库查询的结果为None,继续看回查询模块的函数定义,使用了try except模块,也就是前面查询的时候出错了,看半天,楞是看不出哪里有问题,就使用了pycharm的debug功能,把断点设置在sql函数执行的位置

eefbbd2c1107265378a8c1e8069fcffd.png

然后再根据debug一步步看,发现连接根本没有建立起来

fc01e967d2e988dcf62973d1cadbcc3b.png

再看看自己的代码,终于发现原来全局变量db = pymysql.connect(xxx)根本没有生效;

然后这个也根据自己在模块导入时候的方式有关,from xx import mysqlinfo 只导入了模块,而使用的时候只是调用了某个函数,最终导致全局变量没有生效。

解决方案:

1、导入的时候换种模式,直接改成from xx.mysqlinfo import * ,把整个模块所以的内容均引入进来,但是这种模式如果其他模块中存在类似的变量名或者函数名时,就会容易出现冲突,特别是项目越来越大,定义的模块和各种函数越来越多的时候需要谨慎使用;

2、各个函数单独建立db = pymysql.connect(xxx)模式,同时把连接时候需要的各个变量放在一个公共的config的常量文件中,这样导入的时候就不会相互干扰了,数据库连接字段修改了也只需要修改配置文件中的常量就可以了,但是这种方式有违背Pythonic的特性,就是代码过于冗余;

3、第三种模式是推荐模式,就是将mysqlinfo封装成一个类,在使用的时候先实例化这个类,这样就可以避免全局变量的问题

0dd41a9f51e9b3ebdbedc7887eb380ef.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值