Python代码在独立函数中运行,但作为类的一部分却不运行

1 投票
1 回答
819 浏览
提问于 2025-04-18 07:54

在Python 3.3.5中,我正在把一些可以独立运行的代码整理成一个类,但当我运行这个类的时候,它会在没有任何错误信息的情况下直接停止。这个代码依赖于一个第三方包pcFastDB,它是以pyd文件的形式分发的。

unit1.py
import sys
import pcFastDB as p3

def get_context():
    return p3.pcContext.create()

def get_DB(ctx, dbName):
    return p3.pcDB.open(ctx, dbName)
.. more..

可以这样使用:

ctx = get_context()
db = get_DB(ctx, 'tester')
..do things with db

但是

Unit2.py
import pcFastDB as p3
class DBOperation(object):
    def __init__(self, DB_name):
        '''
        Get the context, open the database and fill a channel list
        '''
        self.ctx = p3.pcContext.create()
        print('Context ' + str(self.ctx ))
        print(' - opening ' + DB_name)
        self.db = p3.pcDB.open(self.ctx, DB_name)  #aborts here
        print('DB opened successfully...' +str(self.db))

当我尝试打开数据库时,它就会悄无声息地停止运行。

db = DBOperation('tester')

测试用的数据库是存在的,并且在我运行代码的项目文件夹里。

没有任何异常,也没有错误,它就是停止执行。PyDev对这个pyd文件的支持不是很好。我无法获得任何代码提示,所以调试起来有点神秘,但在IPython3中我可以看到所有的函数和类成员,所以我知道它是可以的。不幸的是,在IPython3中调试对我来说是个难以理解的谜。

无论如何,我知道我调用的是正确的函数,并且这些函数在Unit1中运行得很好,只是在作为类成员时不行。这可能吗?

我已经把数据库的相关代码从init方法中分离出来,单独调用它们,并且把ctx从类中分离出来传递给函数,但这样也不行。在PyDev、IPython3或命令行中运行时,它的表现都是一样的。

有什么想法吗?

1 个回答

0

谢谢大家,我通过把相同的代码重新写到一个新模块里解决了问题。看起来文件本身有些奇怪的地方。我怀疑是PyDev的问题。

Marc

撰写回答