2

私はこのコードを持っています:

はいtest.py

#!/usr/bin/env python
import os
from suds.client import Client as abo

WSDL = 'DirectConnect.production.wsdl'

def test_api():
    url = 'file://' + os.path.join(os.path.abspath(os.path.dirname(__file__)), WSDL)
    print url
    client = abo('file:///home/agileone/workspace/surebooked/surebooked/DirectConnect.production.wsdl')

    data = {
        'MerchantCode': 'HELLOWORLD',
        'MerchantReference':  '3252',
        'TransactionType': 20,
        'Amount': 10,
        'CurrencyCode': 'USD',
        'CardHolderName': 'RAUL O REVECHE',
        'CardNumber': 4005550000000001,
        'ExpiryMonth': 5,
        'ExpiryYear': 2013,
        'CardID': 0,
        'CardSecurityCode': 400,
        'CustomerAccountNumber': '',
        'BillNumber': 0,
        'CardHolderEmail': 'development@yespayments.com.ph',
        'ClientIPAddress': 'http://127.0.0.1/',
        'Notes': 'This is test',
    }

    print data
    result = client.service.OnlineTransaction(**data)
    print result.ResponseDescription


if __name__ == '__main__':
    test_api()

を使用して実行するとpython payment.py 問題なく動作しますが、使用してdjangoで実行するとpython manage.py shell

エラーが発生しました。

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from surebooked.yestest import *
>>> test_api()
file:///home/agileone/workspace/surebooked/surebooked/DirectConnect.production.wsdl
{'ExpiryYear': 2013, 'CardNumber': 4005550000000001L, 'BillNumber': 0, 'CardHolderEmail': 'development@yespayments.com.ph', 'MerchantReference': '3252', 'CurrencyCode': 'USD', 'CardHolderName': 'RAUL O REVECHE', 'ExpiryMonth': 5, 'CustomerAccountNumber': '', 'Amount': 10, 'MerchantCode': 'SUREBOOKED', 'ClientIPAddress': 'http://127.0.0.1/', 'CardID': 0, 'Notes': 'This is test', 'CardSecurityCode': 400, 'TransactionType': 20}
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/agileone/workspace/surebooked/surebooked/../surebooked/yestest.py", line 32, in test_api
    result = client.service.OnlineTransaction(**data)
  File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 595, in invoke
    soapenv = binding.get_message(self.method, args, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py", line 120, in get_message
    content = self.bodycontent(method, args, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py", line 63, in bodycontent
    p = self.mkparam(method, pd, value)
  File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py", line 105, in mkparam
    return Binding.mkparam(self, method, pdef, object)
  File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py", line 287, in mkparam
    return marshaller.process(content)
  File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py", line 62, in process
    self.append(document, content)
  File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py", line 73, in append
    log.debug('appending parent:\n%s\ncontent:\n%s', parent, content)
  File "/usr/lib/python2.7/logging/__init__.py", line 1120, in debug
    self._log(DEBUG, msg, args, **kwargs)
  File "/usr/lib/python2.7/logging/__init__.py", line 1250, in _log
    self.handle(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 1260, in handle
    self.callHandlers(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 1300, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 744, in handle
    self.emit(record)
  File "/home/agileone/workspace/surebooked/surebooked/.ve/src/django-debug-toolbar/debug_toolbar/panels/logger.py", line 51, in emit
    'message': record.getMessage(),
  File "/usr/lib/python2.7/logging/__init__.py", line 328, in getMessage
    msg = msg % self.args
  File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py", line 58, in __str__
    return unicode(self).encode('utf-8')
  File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py", line 61, in __unicode__
    return self.str()
  File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py", line 48, in str
    s.append(self.root().str())
AttributeError: 'NoneType' object has no attribute 'str'

問題は泡にあると思いますが、これを解決する方法がわかりません。

誰かが私のケースについて私を助けることができますか?

ネットで検索してみましたが、答えが見つかりませんでした..

前もって感謝します...

これは私がやったことですか?それが正しいか?

>>> import pdb; pdb.pm()
> /usr/local/lib/python2.7/dist-packages/suds/sax/document.py(48)str()
-> s.append(self.root().str())
(Pdb) api_test()
*** NameError: name 'api_test' is not defined
(Pdb) from surebooked.yestest import *
(Pdb) api_test()
*** NameError: name 'api_test' is not defined
(Pdb) from surebooked.yestest import *
(Pdb) test_api()
file:///home/agileone/workspace/surebooked/surebooked/DirectConnect.production.wsdl
{'ExpiryYear': 2013, 'CardNumber': 4005550000000001L, 'BillNumber': 0, 'CardHolderEmail': 'development@yespayments.com.ph', 'MerchantReference': '3252', 'last_traceback': '', 'CurrencyCode': 'USD', 'CardHolderName': 'RAUL O REVECHE', 'ExpiryMonth': 5, 'CustomerAccountNumber': '', 'Amount': 10, 'MerchantCode': 'SUREBOOKED', 'ClientIPAddress': 'http://127.0.0.1/', 'CardID': 0, 'Notes': 'This is test', 'CardSecurityCode': 400, 'TransactionType': 20}
*** AttributeError: 'NoneType' object has no attribute 'str'
(Pdb) 
4

3 に答える 3

6

こんにちは DJDt を同時に使用していますか? Django Debug Toolbar で使用すると発生する suds のバグです。このパッチを確認してください: https://github.com/bradleyayers/suds-htj

于 2012-06-08T08:46:08.960 に答える
3

このエラーは、「NoneType には str メソッドがなく、期待もしない」という意味です。

スタック トレースの最後の行を見てください: s.append(self.root().str()). 呼びかけstrていself.root()ます。ということになりself.root()ますNone

これを解決するには、コンソールからテスト (または同等のコード) をトリガーし、例外が発生したときにimport pdb; pdb.pm(). これにより、例外が発生した (または処理された) 時点でデバッガーに移動します。そこから、のソースを見つけることができますNone

于 2012-04-09T09:13:22.223 に答える
0

単に出力するのではなく、関数をtest_api返すようにするresult.ResponseDescription

于 2012-04-09T09:15:50.423 に答える