2010-01-18 57 views
13

我一直试图通过使用SUDS的wsdl文件来控制摄像头。我有代码工作,但我想将错误处理放入脚本。我尝试过不同的例外,但无法使脚本正常工作。当我输入无效坐标时,出现错误。我使用的代码如下,接下来是我收到的错误。使用SUDS在Python中的错误处理

#!/home/build/Python-2.6.4/python 

import suds 
from suds.client import Client 

#################################################################### 
# 
# Python SUDS Script that controls movement of Camera 
# 
#################################################################### 
# 
#     Absolute Move Function 
# 
#################################################################### 

def absoluteMove(): 

    # connects to WSDL file and stores location in variable 'client' 
    client = Client('http://file.wsdl') 

    # Create 'token' object to pass as an argument using the 'factory' namespace 
    token = client.factory.create('ns4:ReferenceToken') 
    print token 

    # Create 'dest' object to pass as an argument and values passed to this object 
    dest = client.factory.create('ns4:PTZVector') 
    dest.PanTilt._x=400 
    dest.PanTilt._y=0 
    dest.Zoom._x=1 
    print dest 

    # Create 'speed' object to pass as an argument and values passed to this object 
    speed = client.factory.create('ns4:PTZSpeed') 
    speed.PanTilt._x=0 
    speed.PanTilt._y=0 
    speed.Zoom._x=1 
    print speed 

    # 'AbsoluteMove' method invoked passing in the new values entered in the above objects 

    try: 
     result = client.service.AbsoluteMove(token, dest, speed) 
    except RuntimeError as detail: 
     print 'Handling run-time error:', detail 

    print "absoluteMove result ", result 

result = absoluteMove() 

的误差小于:

No handlers could be found for logger "suds.client" 
Traceback (most recent call last): 
    File "ptztest.py", line 48, in <module> 
    if __name__ == '__main__': result = absoluteMove()  
    File "ptztest.py", line 42, in absoluteMove 
    result = client.service.AbsoluteMove(token, dest, speed) 
    File "build/bdist.linux-i686/egg/suds/client.py", line 537, in __call__ 
    File "build/bdist.linux-i686/egg/suds/client.py", line 597, in invoke 
    File "build/bdist.linux-i686/egg/suds/client.py", line 632, in send 
    File "build/bdist.linux-i686/egg/suds/client.py", line 683, in failed 
    File "build/bdist.linux-i686/egg/suds/bindings/binding.py", line 235, in get_fault 
suds.WebFault: Server raised fault: 'Error setting requested pan' 

我不知道我应该在这里使用哪个异常。有谁知道如何捕捉这个错误。值为400的x坐标是度数,这就是错误发生的原因。

谢谢

好的我找到了解决方案。在SUDS中,如果输入:

faults=False 

进入客户端定义,这捕获故障并给出故障发生的原因。该行应为:

client = Client('http://file.wsdl', faults=False) 

我标记为正确答案的帖子也能够发现问题已经发生。

感谢所有

回答

10

如果你想捕获了异常,你应该把

try: 
    result = client.service.AbsoluteMove(token, dest, speed) 
except suds.WebFault as detail: 
    ... 
+1

我已经把故障=假,并试图抓住suds.WebFault,但仍然收到这个错误suds.client‘ – 2010-11-04 13:37:25

1

你需要通过回溯的外观搭上suds.WebFault。错误本身似乎是合法的,IE,你的请求正在被正确执行,但也许你的参数在给定的上下文中是错误的。

15

如果你处理所有的异常和错误在你的代码和你的代码工作正常,但还是你得到下面的消息你正确的输出。

消息:“没有处理可用于记录suds.client发现”

然后一个简单的解决方案是增加这一行

logging.getLogger('suds.client').setLevel(logging.CRITICAL) 

yourclient.py文件只是所有import语句之后。

+8

“不处理程序可以为记录器中找到’不要忘记: '进口logging' – 2012-06-08 08:04:57

+3

,消除客户端调试,它不能解决问题。为了让suds.client日志记录工具运行,你必须先执行logging.basicConfig调用,例如:logging.basicConfig(level = logging.INFO) – FlipMcF 2012-12-03 22:06:12