2012-04-13 8 views
0

からクリーニング私のコードです:Pythonの要求 - 出口は、私はここに、PythonはTwitterのストリーミングAPIを消費するモジュールを要求し使用していますiter_content

self.conn = self.session.post(url, data=self.parameters, headers=self.headers) 
    print >> sys.stderr, 'Connected to Twitter Streaming API' 
    try: 
     for line in self.conn.iter_content(self.ITER_BYTES): 
      self.status += line 
      if line.endswith(self.DIVIDER) and self.status.strip(): 
       self.handler.handle(self.status) 
       self.status = "" 
    except Exception as e: 
     pass 

私はKeyboardInterruptまたはそれを渡すことで、このスクリプトを終了すると私は次のスタックエラーが発生しています:

^CTraceback (most recent call last): 
    File "python-test.py", line 18, in <module> 
    api.start() 
    File "bin/polygraph/api/twitter/streaming.py", line 95, in start 
    self.conn = self.session.post(url, data=self.parameters, headers=self.headers) 
    File "venv/lib/python2.7/site-packages/requests/sessions.py", line 258, in post 
    return self.request('post', url, data=data, **kwargs) 
    File "venv/lib/python2.7/site-packages/requests/sessions.py", line 208, in request 
    r.send(prefetch=prefetch) 
    File "venv/lib/python2.7/site-packages/requests/models.py", line 575, in send 
    timeout=self.timeout, 
    File "venv/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 383, in urlopen 
    body=body, headers=headers) 
    File "venv/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 261, in _make_request 
    httplib_response = conn.getresponse() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1013, in getresponse 
    response.begin() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 402, in begin 
    version, status, reason = self._read_status() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 360, in _read_status 
    line = self.fp.readline() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 430, in readline 
    data = recv(1) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 219, in recv 
    return self.read(buflen) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 138, in read 
    return self._sslobj.read(len) 
KeyboardInterrupt 

これを回避する方法はありますか接続を正常に終了しますか?

答えて

2

KeyboardInterrupt例外をキャッチするだけで済みます。これはdoes not inherit from Exceptionなので、あなたは現在それをキャッチしていません。

これは、except Exceptionが悪い考えである理由のもう1つの例です。あなたが意図していないものをキャッチするだけでなく、あなたが望むものをキャッチできないかもしれません。明示的な例外をキャッチします。

関連する問題