2011-04-13 21 views
5

Python kodundan bir Suds.WebFault yükseltmeye çalışıyorum. __init__ yöntem \ constructor, __init__(self, fault, document) üç bağımsız değişken alır. Arıza fault.faultcode ve fault.detail members \ attributes \ properties. Denediğim matlığın hangi sınıf hataya ait olduğunu anlayamadım. Python kodundan Suds.WebFault tip istisnasını nasıl yükseltebilirim?Python kodundan Suds.WebFault nasıl yükseltilir?

Şimdiden teşekkürler.

+0

Chrissygormley tarafından verilen cevap benim için çalışıyor. Eğer sizin için çalışıyorsa, lütfen işaretleyin. – paragbaxi

cevap

6

emin değil soruyorsun ancak kullandığınız bir web arızayı atabilir tam olarak ne:

import suds 

try: 
    client.service.Method(parameter) 
except suds.WebFault, e: 
    print e 
+1

Hiç talep edilmiyor. – Jon

+2

Bu aslında bir WebFault'u nasıl yakaladığınızdır, nasıl fırlatır/kaldırırsınız. –

0

WebFault sadece <Fault> eleman web sunucusu tarafından döndürülen zaman konumuna yükseltilmesi amaçlanmıştır. Bu yüzden bunu kendiniz yetiştirmek muhtemelen kötü bir fikirdir.

Eğer hala yapmak istiyorsanız, çerçeveyi yükselten koda bakmaya başlıyorum: https://github.com/unomena/suds/blob/4e90361e13fb3d74915eafc1f3a481400c798e0e/suds/bindings/binding.py#L182 - ve oradan geriye doğru çalışıyorum.

class WebFault(Exception): 
    def __init__(self, fault, document): 
     if hasattr(fault, 'faultstring'): 
      Exception.__init__(self, u"Server raised fault: '%s'" % 
       fault.faultstring) 
     self.fault = fault 
     self.document = document 

nedenle mesajla ilk param olarak bir nesne geçmelisiniz anlamlı mesaj içeren bir WebFault yükseltmek:

2

WebFault olarak suds.__init__.py tanımlanmıştır. Belge, gerekmedikçe None olabilir.

import suds 

class Fault(object): 
    faultstring = 'my error message' 

raise suds.WebFault(Fault(), document=None) 
+1

Harika cevap teşekkürler. Referans için, genel bir sunucu işlem hatasını taklit etmek için sahte bir sistemde yapmam gerekiyor. –

+0

Bu, yanıt olarak işaretlenmelidir. – Sezen