Python-除了(OSError,e)-不再在3.3.3中工作了?

2024-04-24 12:06:51 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码已经在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中断等

有快速的指示吗?


Tags: 代码文档import内容returnosdefpid
1条回答
网友
1楼 · 发布于 2024-04-24 12:06:51

表达式except (OSError, e)从不在Python中工作,而不是以您认为的方式工作。expresion捕获两种异常类型,OSError或全局e所指的任何类型。当没有全局名称e时,代码将中断。

Python3和Python2.6及更新版本的正确表达式是:

except OSError as e:

Python 2还支持以下语法:

except OSError, e:

无括号,或:

except (OSError, ValueError), e:

捕捉多个类型。正如你自己在这里发现的,语法非常混乱。

更改是在Python2.6及更高版本中添加的,请参见2.6 What's New文档的PEP 3110 - Catching Exceptions in Python 3000Exception-handling changes section

对于errno.EPERM;的异常,您没有导入errno,因此也就是NameError

相关问题 更多 >