2016-03-24 9 views
0

_create_system_cobbler関数をスタンドアロンスクリプトで単独で実行すると、エラーをキャプチャできます。この場合、エラーをシミュレートしています。使用しているDNS名が既に存在していると伝えます。しかし、それを関数に入れて、私のmain関数からの呼び出しを行うと、常にTrueが返されます。 IPython:try/exceptブロックが常にTrueを返します

エラー:

Error! <class 'cobbler.cexceptions.CX'>:'dns-name duplicated: inadmin001.domain.local' 

_create_system_cobbler機能リターンコードを使用して

def _create_system_cobbler(): 
    try: 
     cobbler_server = xmlrpclib.Server("https://127.0.0.1/cobbler_api") 
    except socket.error: 
     print "Can't Connect to Cobbler" 
     quit() 

    serverinfo = { 
     'hostname' : 'inadmin001', 
     'macaddress': '00:2e:4e:78:ba:86', 
     'ipaddress': '172.21.10.33', 
     'dnsname': 'inadmin001.domain.local' 
    } 

    try: 
     token = cobbler_server.login("cobbler","cobbler") 
     system_id = cobbler_server.new_system(token) 
     ... 
     <more code> 
     ... 
    except xmlrpclib.Fault as err: 
     errormsg = "Error " + str(err.faultString) 
     return False, errormsg 

    return True, serverinfo 

主な機能

def main(session) 
    handler, serverinfo = _create_system_cobbler() 
    if handler: 
     print "Let's create a VM" 
     print serverinfo 
     # Let's continue with the rest of the code 
    else: 
     print serverinfo 
     quit() 
+0

あなたはpythonでリターンフラグを使用しないでください。代わりにtry ... exceptを使用してください。 – MaxNoe

+0

@MaxNoe try..exceptが使用されました。私は問題は、 'return'の代わりに' raise'が必要だと思います。 –

+3

なぜ違う動作になっているのか分かりませんが、私はあなたのデザインにコメントしたいと思います:Falseを返すことによって例外を処理しません。例外を伝播させて、呼び出し元に処理させてください。情報を追加したい場合は、Python 3がraise ... from:https://www.python.org/dev/peps/pep-3134/そうでなければ、あなた自身で内部例外を "手動で"ラップすることができます。例えば。 try:asplode()Explosion as e:raise MoreDetailedExplosion( '詳細情報'、e) – allyourcode

答えて

0

は非常にニシキヘビではありません、あなたはすべてがうまくいくと仮定関数を記述しなければならないし、 except例外:

def create_system_cobbler(): 

    cobbler_server = xmlrpclib.Server("https://127.0.0.1/cobbler_api") 

    serverinfo = { 
     'hostname' : 'inadmin001', 
     'macaddress': '00:2e:4e:78:ba:86', 
     'ipaddress': '172.21.10.33', 
     'dnsname': 'inadmin001.domain.local' 
    } 

    token = cobbler_server.login("cobbler","cobbler") 
    system_id = cobbler_server.new_system(token) 
    ... 
    <more code> 
    ... 

    return cobbler_server 


def main(session): 
    try: 
     handler = create_system_cobbler() 
    except socket.error: 
     print("Can't Connect to Cobbler") 
    except xmlrpclib.Fault as err: 
     print('Error: ', err) 
+0

ああ、私は参照してください。私は 'try/except'ブロックがどこに行かなければならないのか分かりませんでした。今は理にかなっている。どうもありがとう。 – luckytaxi

関連する問題