Woo*_*kai 7 python curl pycurl twitter-streaming-api
我正在编写一个Python脚本,pycurl
用于使用Twitter的Sreaming API.这是一个简短的代码片段(只需将您的Twitter登录名/密码进行测试):
import pycurl
user = 'USER'
password = 'PWD'
def handleData(data):
print(data)
conn = pycurl.Curl()
conn.setopt(pycurl.USERPWD, "%s:%s" % (user, password))
conn.setopt(pycurl.URL, 'https://stream.twitter.com/1/statuses/sample.json')
conn.setopt(pycurl.WRITEFUNCTION, handleData)
conn.perform()
Run Code Online (Sandbox Code Playgroud)
问题是因为脚本使用流,所以conn.perform()
永远不会返回(或很少).因此,我有时需要中断脚本,并且KeyboardInterrupt
被perform()
方法捕获.
但是,它不能很好地处理它,打印出一个丑陋的错误,并引发一个不同的异常.
^CTraceback (most recent call last):
File "test.py", line 6, in handleData
def handleData(data):
KeyboardInterrupt
Traceback (most recent call last):
File "test.py", line 12, in <module>
conn.perform()
pycurl.error: (23, 'Failed writing body (0 != 2203)')
Run Code Online (Sandbox Code Playgroud)
该卷曲FAQ说,中断正在进行的转移,回调函数(在我的情况handleData
),应返回的特殊值.这很棒,但是KeyboardInterrupt
没有被任何回调功能捕获!
我怎么能整齐地做到这一点?
编辑:我知道你可以捕获异常,但pycurl仍然做一些有趣的事情:
如果我做:
try:
conn.perform()
except BaseException as e:
print('We caught the exception')
print(type(e))
Run Code Online (Sandbox Code Playgroud)
我明白了:
^CTraceback (most recent call last):
File "test.py", line 6, in handleData
def handleData(data):
KeyboardInterrupt
We caught the exception
<class 'pycurl.error'>
Run Code Online (Sandbox Code Playgroud)
这意味着在内部,pycurl
做某种捕获,打印一个丑陋的错误消息,然后提出一个pycurl.error
.
您可以通过捕获 pycurl.error 类型来完成此操作。前任:
try:
conn.perform()
except pycurl.error, e:
errorCode, errorText = e.args
print 'We got an error. Code: %s, Text:%s'%(errorCode, errorText)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6332 次 |
最近记录: |