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

在Python中只捕获一些运行时错误,python,exception-handling,try-catch,runtime-error,Python,Exception Handling,Try Catch,Runtime Error,我导入的模块在某些情况下会引发以下错误: 运行时错误:pyparted需要根访问权限 我知道我可以在导入之前检查root访问权限,但我想知道如何通过try/except语句捕获这种特殊的错误,以供将来参考。有没有办法区分此运行时错误和可能引发的其他错误 try: import pyparted except RuntimeError: print('RuntimeError is raised') raise 更多关于 在我看来,这种情况应该会产生。你可以自己做: tr

我导入的模块在某些情况下会引发以下错误: 运行时错误:pyparted需要根访问权限

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

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise
更多关于

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

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

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

if condition:
     import module

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

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise
当然,直接文本比较只是一个例子,您可以搜索包含的子字符串或正则表达式

值得注意的是,异常的
.message
属性为。您可以在
.args
中找到文本,通常是
args[0]

。。。对于2.6,不推荐使用
消息
属性,而支持
参数
属性

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

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise
如果错误是由特定条件引起的,那么我认为捕获错误的最简单方法是测试条件,您可以自己提出更具体的错误。在抛出错误之前存在所有“错误”,因为在这种情况下是环境问题

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

当检测到不属于任何其他类别的错误时,就会出现这种情况

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "
这就是我们将如何捕获python中由于超过递归限制而导致的运行时错误

如果您想调用超过递归限制的函数,可以执行以下操作

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()
但强烈建议不要更改递归限制,
但是允许对递归限制进行非常小的更改

,每次开发人员更改错误消息中的一个字母时,您都需要更改它。这太糟糕了!除非绝对不可避免,否则您不应该这样比较错误消息。不幸的是,在这种情况下,比较错误消息似乎是不可避免的-pyparted似乎不会引发更具体的错误。
import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()