2017-05-24 3 views
0

コードを自己修復可能にする問題があります。例:CSVからVerticaデータベースにデータをロードする方法1を実行します。データベースの行数とCSVファイルの行数が同じかどうかを確認する別の方法2があります。行数が一致しない場合は、クエリを呼び出した場所からメソッド2を呼び出して、CSVからデータベースにデータをロードすることを考えていました。Pythonでチェックポイントを設定してランタイム状態をキャッチする

私はこの問題のチェックポイント戦略を考えていました。エラーが通常発生するコード内のいくつかのポイントを維持し、他のポイントでそれらを呼び出すようにします。

私はすでに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 

が、私は私のコードは、マンゴーの方法は、リンゴのメソッドを呼び出したときに、それは「マップル」のみの印刷のポイントから実行する必要がありますように実行したい:

私はいくつかのデモコードを提供してきました。メソッド全体を実行してはいけません。

私はこの問題を解決する方法についていくつかの洞察を提供してください。事前に

おかげ

答えて

0


あなたのコードは全く動作しません。 filehandler in def mango(...と同じであり、filehandlerdef apple(...と同じです。したがって、def mango(...にあるファイルは、は決してを閉じませんでした。

def appleif condidtionを追加し、あなたは全く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) 
関連する問題