0

我有一个问题要让我的代码更自愈。例如:我执行方法 1 将数据从 CSV 加载到 Vertica 数据库中。我有另一种方法 2 来检查数据库中的行数和 CSV 文件中的行数是否相同。如果行数不匹配,那么我正在考虑从调用查询的位置调用方法 2,以将数据从 CSV 加载到数据库中。

我正在考虑针对此问题的检查点策略。例如,在代码中维护通常发生错误的一些点并在其他点调用它们。

我已经尝试在 python 中使用 pickle 模块,但后来知道 pickle 只能保存对象、类、变量等。不能保存我实际执行方法的点。

我提供了一些演示代码:

import pickle        
class Fruits:
  def apple(self):
    filehandler= open ("Fruits.obj","wb")
    print "apple"
    pickle.dump(self,filehandler)
    print "mapple"
    filehandler.close()
  def mango(self):
    filehandler = open("Fruits.obj","rb")
    print "mango"
    obj=pickle.load(filehandler)
    obj.apple()

general = Fruits()
general.apple()
general.mango()

the output of above program is:
apple
mapple
mango
apple
mapple

我希望我的代码能够执行,以便当 mango 方法调用 apple 方法时,它必须从仅打印“mapple”的点开始执行。它不能执行整个方法。

请给我一些关于如何解决这个问题的见解。

提前致谢

4

1 回答 1

0

注意
您的代码根本不起作用。filehandlerin与def mango(... in不同filehandler。因此,打开的def apple(...文件永远不会关闭def mango(...

添加if condidtiondef apple,你根本不需要pickle

def apple(self, mango=False):
    if not a´mango:
        filehandler= open ("Fruits.obj","wb")
        ...

    print "mapple"        
    ...

 def mango(self):
    filehandler = open("Fruits.obj","rb")
    ...
    obj.apple(True)
于 2017-05-24T19:38:45.737 回答