簡體   English   中英

Tornado 如何返回錯誤異常?

[英]Tornado how to return error exception?

我想運行一個方法,我知道這個方法不起作用,我想得到該方法返回的錯誤。

這是我的代碼:

def is_connect(s):
    print("ok connection")
    print(s)
    ioloop.stop()


try:


    current_job_ready = 0
    print("ok1")
    beanstalk = beanstalkt.Client(host='host', port=port)

    print("ok1")
    beanstalk.connect(callback=is_connect)


    ioloop = tornado.ioloop.IOLoop.instance()
    ioloop.start()
    print("ok2")
except IOError as e:
    print(e)

這是我使用 wring port 運行程序時遇到的錯誤:

WARNING:tornado.general:Connect error on fd 7: ECONNREFUSED
ERROR:tornado.application:Exception in callback <functools.partial object at 0x7f5a0eac6f18>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 604, in _run_callback
    ret = callback()
  File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
    return fn(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 619, in <lambda>
    self.add_future(ret, lambda f: f.result())
  File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 270, in wrapper
    result = func(*args, **kwargs)
TypeError: connect() takes exactly 1 argument (2 given)

當我輸入錯誤的端口或主機時,我想擁有 e。 我怎樣才能做到這一點? 我厭倦了在beanstalk = beanstalkt.Client(host='host', port=port) raise IOError("connection error")之后添加raise IOError("connection error")但這會強制錯誤,我只想在錯誤存在時出現錯誤。

這是閱讀代碼有幫助的地方。 在 beanstalkt 0.6 的connect ,它創建了一個 IOStream 來連接到服務器:

https://github.com/nephics/beanstalkt/blob/v0.6.0/beanstalkt/beanstalkt.py#L108

它注冊您的回調以在成功時執行,但如果連接失敗,它將永遠每秒調用一次Client._reconnect 我認為您應該在他們的 GitHub 項目中打開一個功能請求,要求為connect提供一個錯誤通知系統。 使用當前的 beanstalkt 實現,您只需決定願意等待成功的時間:

import sys
from datetime import timedelta

from tornado.ioloop import IOLoop

def is_connect(s):
    print("ok connection")
    print(s)
    loop.remove_timeout(timeout)
    # Do something with Beanstalkd....

def connection_failed():
    print(sys.stderr, "Connection failed!")
    # Could call IOLoop.stop() or just quit.
    sys.exit(1)

loop = IOLoop.current()
timeout = loop.add_timeout(timedelta(seconds=1), connection_failed)
beanstalk.connect(callback=is_connect)
loop.start()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM