我正在导入一个模块,在某些情况下会引发以下错误: RuntimeError:pyparted需要root访问权限
我知道我可以在导入之前检查root访问权限,但我想知道如何通过try / except语句捕获这种特殊类型的错误以供将来参考。有没有办法区分这个RuntimeError和其他可能引发的错误?
答案 0 :(得分:9)
您可以检查异常的属性,以区别于其他可能的RuntimeError
异常。例如,如果错误与预定义的消息文本不匹配,请重新引发错误。
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
当然,直接文本比较只是一个示例,您可以搜索包含的子字符串或正则表达式。
值得注意的是,例外的.message
属性为deprecated starting with Python 2.6。您可以在.args
中找到文字,通常是args[0]
。
...对于2.6,不推荐使用
message
属性,而使用args
属性。
答案 1 :(得分:7)
我知道我可以在导入之前检查root访问权限,但我想知道如何通过try / except语句捕获这种特殊类型的错误以供将来参考。有没有办法区分这个RuntimeError和其他可能引发的错误?
如果错误是由特定条件引起的,那么我认为捕获错误的最简单方法是测试条件,并且您可以自己引发更具体的错误。在抛出错误之前存在所有“错误”之后,因为在这种情况下它是环境问题。
我同意上述内容 - 错误的文字匹配是一种可怕的前景。
答案 2 :(得分:4)
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
更多关于exception handling in tutorial。
在我看来,这种情况应该产生ImportError
。你可以自己做:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
答案 3 :(得分:1)
是
try:
import module
except RuntimeError:
pass
导入被解释为任何其他语句,它们并不特殊。你可以做一个
if condition:
import module
答案 4 :(得分:1)
try:
import ...
except RuntimeError:
# Do something
答案 5 :(得分:0)
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()
但总是不建议更改递归限制, 但允许递归限制的微小变化