下面的代码已经在Python3.X中运行过,在3.3.3中没有中断,在文档中找不到更改的内容。
import os
def pid_alive(pid):
pid = int(pid)
if pid < 0:
return False
try:
os.kill(pid, 0)
except (OSError, e):
return e.errno == errno.EPERM
else:
return True
尝试了except行的不同变体,例如except OSError as e:
但随后errno.EPERM
中断等
有快速的指示吗?
表达式
except (OSError, e)
从不在Python中工作,而不是以您认为的方式工作。expresion捕获两种异常类型,OSError
或全局e
所指的任何类型。当没有全局名称e
时,代码将中断。Python3和Python2.6及更新版本的正确表达式是:
Python 2还支持以下语法:
无括号,或:
捕捉多个类型。正如你自己在这里发现的,语法非常混乱。
更改是在Python2.6及更高版本中添加的,请参见2.6 What's New文档的PEP 3110 - Catching Exceptions in Python 3000和Exception-handling changes section。
对于
errno.EPERM
;的异常,您没有导入errno
,因此也就是NameError
。相关问题 更多 >
编程相关推荐