首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中捕获EINTR?

如何在Python中捕获EINTR?
EN

Stack Overflow用户
提问于 2013-03-18 18:04:16
回答 1查看 1K关注 0票数 1

我的问题是由EINTR信号引起的(如果我没有错的话),在执行像select这样的系统调用时,EINTR信号导致了错误的产生。这个问题在互联网上无处不在,有很好的解决方案,但它们都不适合我。在多线程应用程序中,我使用了许多select调用(我有TCP服务器和单独的TCP客户端),当我调用系统锁(我的应用程序通过gnome-screensaver-commands -lock执行此操作)时,随机选择抛出:

代码语言:javascript
复制
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
  File "/home/aziemek/Desktop/Zablokowanie uśpienia/server.py", line 45, in run
inputready,outputready,exceptready = select.select([self.server],[],[],TIME_TO_CHECK/2)
error: (4, 'Interrupted system call')

这是我尝试缓存EINTR的方式:

代码语言:javascript
复制
try:
    inputready,outputready,exceptready = select.select([self.client],[],[],TIME_TO_CHECK*2) 
except EnvironmentError as why:
    print("Blad ta :" + str(why.args[0]))
    if why.args and why.args[0] != EINTR:
        print("Error during server loop" + why)
    else:
        continue
except socket.error as why:
    print("Blad ta :" + str(why.args[0]))
    if why.args and why.args[0] != EINTR:
        raise
    else:
        continue
except Exception as why:
    print("Blad to :" + str(why.args[0]))
except:
    print("Blad niewiadomy")

"except“子句都不能捕捉到这个异常--即使是最后两个。系统: Linux Ubuntu,Python 2.6.5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-18 18:08:35

你想抓到OSError, select.error

代码语言:javascript
复制
import select
# ...

except (OSError, select.error) as why:
    # ...

OSError,所以你是向前兼容的;你的回溯是处理select.error的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15474072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档