在Python中只捕获一些运行时错误

lfa*_*one 6 python exception-handling runtime-error try-catch

我正在导入一个模块,在某些情况下会引发以下错误:RuntimeError:pyparted需要root访问权限

我知道我可以在导入之前检查root访问权限,但我想知道如何通过try/except语句捕获这种特殊类型的错误以供将来参考.有没有办法区分这个RuntimeError和其他可能引发的错误?

gim*_*mel 9

您可以检查异常的属性以区别于其他可能的RuntimeError异常.例如,如果错误与预定义的消息文本不匹配,请重新引发错误.

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise
Run Code Online (Sandbox Code Playgroud)

当然,直接文本比较只是一个示例,您可以搜索包含的子字符串或正则表达式.

值得注意的是,从Python 2.6开始,不推荐使用.message异常属性.您通常可以在中找到文本..argsargs[0]

...对于2.6,message不推荐使用该args属性以支持该属性.

  • 这是不好的!除非绝对不可避免,否则你不应该比较那样的错误信息. (3认同)

dec*_*rig 7

我知道我可以在导入之前检查root访问权限,但我想知道如何通过try/except语句捕获这种特殊类型的错误以供将来参考.有没有办法区分这个RuntimeError和其他可能引发的错误?

如果错误是由特定条件引起的,那么我认为捕获错误的最简单方法是测试条件,并且您可以自己引发更具体的错误.在抛出错误之前存在所有"错误"之后,因为在这种情况下它是环境问题.

我同意上述内容 - 关于错误的文本匹配是一种可怕的前景.


Sil*_*ost 5

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise
Run Code Online (Sandbox Code Playgroud)

有关异常处理的更多信息,请参阅教程

这种情况ImportError在我看来应该是会产生的。你可以自己做:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)
Run Code Online (Sandbox Code Playgroud)