以下内容在Python 3.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 OSError as e:
,然后errno.EPERM
打破等等。
任何快速指示?
答案 0 :(得分:34)
表达式except (OSError, e)
从不在Python中工作,而不是以您认为的方式工作。该表达式捕获两个类型的异常; OSError
或全球e
所指的任何内容。当没有全局名称e
时,您的代码会中断。
Python 3和Python 2.6及更新版本的正确表达式是:
except OSError as e:
Python 2还支持语法:
except OSError, e:
没有括号,或者:
except (OSError, ValueError), e:
捕获多种类型。语法非常令人困惑,正如你自己在这里发现的那样。
在Python 2.6及更高版本中添加了更改,请参阅2.6新功能文档的PEP 3110 - Catching Exceptions in Python 3000和Exception-handling changes section。
至于errno.EPERM
的例外情况;您没有导入errno
,因此也是NameError
。