PUDB错误:<no source =“” code =“” available =“”>

时间:2018-08-08 21:13:11

标签: python pudb

我是pudb的新手。在大多数情况下,它运行良好,但是当我尝试进入一个库时,它显然无法识别,我收到以下消息:

from keras import Sequential
from keras.layers import Dense
from keras.models import load_model

import numpy as np

class Model:
    def __init__(self, data=None):
        self.data = data
        self.metrics = []
        self.model = self.__build_model()

    def __build_model(self):
        model = Sequential()
        model.add(Dense(4, activation='relu', input_shape=(3,)))
        model.add(Dense(1, activation='relu'))
        model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
        return model

    def train(self, epochs):
        self.model.fit(self.data[:, :-1], self.data[:,-1], epochs=epochs)
        return self

    def test(self, data):
        self.metrics = self.model.evaluate(data[:, :-1], data[:, -1])
        return self

    def predict(self, input):
        return self.model.predict(input)

    def save(self, path):
        self.model.save(path)
        # I would like to save self.metrics at the same time

    def load(self, path):
        self.model = load_model(path)


if __name__ == '__main__':
    train_data = np.random.rand(1000, 4)
    test_data = np.random.rand(100, 4)
    print("TRAINING, TESTING & SAVING..")
    model = Model(train_data)\
                .train(epochs=5)\
                .test(test_data)\
                .save('./model.h5')

    print('LOADING model & PREDICTING..')
    test_sample = np.random.rand(1, 3)
    model = Model()
    model.load('./model.h5')
    # I can then do like:
    test_output = model.predict(test_sample)
    print(test_output)

    # And want to get metrics which i had saved with it like:
    metrics = model.metrics
    print(metrics)

我尝试导入“ linecache”,并且“ cache”属性是字典。我试过几次为丢失的模块创建一个条目,但是没有成功。

有人可以举一个更简单和/或更实用的方式向pudb添加无法识别的模块的示例吗?

1 个答案:

答案 0 :(得分:2)

它为我工作的方式如下。

在执行过程中即时生成的一段代码时,我收到了此消息。我跟踪了生成代码的位置,并添加了:

import linecache
linecache.cache[__file__] = (len(source), 0, source, __file__)

(其中source变量对应于生成的源)

我观察到的是,在pudb交互模式下,在堆栈列表中出现了一个新项目。此新项目位于引发<no source code available>消息的项目之前。

当我浏览这个新项目时,我可以看到生成的源。