2012-04-13 3 views
0

내가 파이썬은 트위터 스트리밍 API를 소비하는 모듈을 요청 사용하고 있습니다에서 청소 종료, 여기 내 코드입니다 : 나는 KeyboardInterrupt 또는 전달하여이 스크립트를 종료하면파이썬 요청하는 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 

그것 종료 신호가 발생했습니다. 다음과 같은 스택 오류가 발생합니다.

^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 예외를 catch하면됩니다. 이 does not inherit from Exception, 따라서 당신은 현재 그것을 잡으려고하지 않습니다.

이것은 except Exception이 나쁜 아이디어 인 또 다른 예입니다. 당신이 의도하지 않은 것을 잡을뿐만 아니라, 당신이 원했던 것을 잡아 내지 못할 수도 있습니다. 명시 적 예외를 잡아라.