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

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

有帮助吗?

解决方案

  

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

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

我同意上述内容 - 错误的文字匹配是一种可怕的前景。

其他提示

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

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

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

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

  

...对于2.6,不推荐使用 message 属性,而使用 args 属性。

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

更多关于教程中的异常处理

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

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

   try:
        import module
   except RuntimeError:
         pass

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

if condition:
     import module
try:
   import ...
except RuntimeError:
   # Do something

RuntimeError 在检测到不存在&#的错误时触发8217; t属于任何其他类别

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()

但总是不建议更改递归限制, 但允许递归限制的微小变化

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top