7

我正在导入一个在某些情况下会引发以下错误的模块: RuntimeError: pyparted requires root access

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

4

6 回答 6

12

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

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

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

值得注意的是.messageexceptions 的属性从 Python 2.6 开始被弃用.args您通常可以在 中找到文本args[0]

... 对于 2.6,该message属性已被弃用,取而代之的是该args属性。

于 2009-05-05T17:17:04.470 回答
8

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

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

我同意上述观点——错误的文本匹配是一种可怕的前景。

于 2009-05-05T17:56:44.843 回答
4
try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

教程中有关异常处理的更多信息。

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

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)
于 2009-05-05T17:08:01.933 回答
1

是的。

   try:
        import module
   except RuntimeError:
         pass

导入被解释为任何其他语句,它们并不特殊。你可以做一个

if condition:
     import module
于 2009-05-05T17:08:31.620 回答
1
try:
   import ...
except RuntimeError:
   # Do something
于 2009-05-05T17:08:49.450 回答
1

RuntimeError在检测到不属于任何其他类别的错误时引发

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "

这就是我们将如何捕获由python中超出递归限制引起的RuntimeError

如果你想在递归限制上调用你的函数,你可以执行以下操作

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()

但始终强烈不建议更改递归限制,但允许对递归限制进行非常小的更改

于 2013-05-15T06:29:27.460 回答