在Python中仅捕获部分运行时错误

10 投票
6 回答
34441 浏览
提问于 2025-04-15 11:24

我在导入一个模块的时候,在某些情况下会出现以下错误:
RuntimeError: pyparted 需要管理员权限

我知道在导入之前可以先检查一下是否有管理员权限,但我想知道如何通过 try/except 语句来捕捉这种特定的错误,以备将来参考。有没有办法区分这个 RuntimeError 和其他可能出现的错误呢?

6 个回答

5
try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

更多关于异常处理的内容可以在教程中找到

在我看来,这种情况应该会产生ImportError。你也可以自己尝试一下:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)
15

你可以查看异常的属性,以便和其他可能的 RuntimeError 异常区分开来。例如,如果异常的消息内容和你预设的不一样,就可以重新抛出这个错误。

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise

当然,直接比较文本只是一个例子,你也可以查找包含的子字符串或者使用正则表达式。

值得注意的是,从 Python 2.6 开始,异常的 .message 属性已经被弃用了。你可以在 .args 中找到相关文本,通常是 args[0]

... 在 2.6 版本中,message 属性被弃用,取而代之的是 args 属性。

8

我知道在导入之前可以先检查是否有根权限,但我想知道如何通过try/except语句捕捉这种特定类型的错误,以备将来参考。有没有办法区分这种RuntimeError和其他可能出现的错误呢?

如果这个错误是由特定的条件引起的,那么我觉得捕捉这个错误最简单的方法就是先检查这个条件,然后你可以自己抛出一个更具体的错误。毕竟,错误在抛出之前就已经存在了,因为在这种情况下,这是环境的问题。

我同意上面的人说的——通过文本匹配来处理错误,这种想法有点可怕。

撰写回答