Python:变量仅在存在print语句时有效

时间:2014-09-19 16:28:19

标签: python wxpython wxformbuilder

我有一个非常奇怪的问题,在过去的一天里让我感到难过。

import wx, gui, threading, time, pyodbc
from OrderNumEntry import entryID, plyID, stationID
from main import strPlyDB
from Op1Login import eID1
global eID1

class MainFrame1(gui.MainFrame1Op):
    def __init__(self, parent):
        gui.MainFrame1Op.__init__(self, parent)
        self.m_textCtrl3.SetValue(eID1)
        # print eID1

    def checkClick1(self, event):
        if threading.activeCount() < 2:
            t1 = threading.Thread(target = self.checkAdvance1)
            t1.setDaemon(True)
            t1.start()
            self.m_checkBox110.SetValue(True)

    def checkAdvance1(self):
        strODBC_conn = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s' % strPlyDB
        conn = pyodbc.connect(strODBC_conn)
        cursor = conn.cursor()

        # eID1 = '00839530'
        print 'test1'
        print eID1
        print 'test2'

        SQL = 'INSERT INTO tblRecord(EntryID, PlyID, StationID, EmployeeNum, BuyoffTime) values(?,?,?,?,?)'
        cursor.execute(SQL, (entryID, plyID, stationID, eID1, time.strftime("%c")))

        cursor.commit()
        cursor.close()
        conn.close()

正在发生的是主要的Python文件main.py,它初始化了我的mainframe1类,它引用了gui.py所有的wxpython代码来调出窗口。这个文件只是事件处理程序。当我点击我窗口中的复选框(我知道的广告素材名称)时会checkClick1运行,而该复选框会启动checkAdvance1的主题。

除了一部分外,程序中的一切正常。我的eID1变量在__init__中运行正常,textCtrl3显示它。但是,当我尝试在checkAdvance1中再次使用它时,程序会挂起。

为了测试它,我用eID1包含了两个测试打印语句的print语句。只打印test1,并且没有给出错误代码,程序只是挂起。更让人感到困惑的是,当我在print eID1函数中添加__init__语句时(它现在被注释掉),程序运行得很好!

我不确定print语句会如何影响变量功能,但它正在发生。但是,将一个打印语句放入修复程序似乎是一种伪劣的解决方法,忽略了实际问题。此外,注释掉的eID1声明只是一个示例,向您展示程序运行时变量的内容。

编辑: 我想出了一个我并不完全满意的工作,但它比添加打印更好。如果我创建另一个变量,我可以将它设置为empID1的字符串转换,如下所示:empID1 = str(eID1)。然后我可以在以后用eID1来引用这个值。然而,这仍然不适合我,因为根据我所知道和研究的一切,我的原始代码应该工作。这让我觉得幕后会发生一些不好的事情,以后可能会再次咬我。

0 个答案:

没有答案