在Python中仅捕获部分运行时错误
我在导入一个模块的时候,在某些情况下会出现以下错误:
RuntimeError: pyparted 需要管理员权限
我知道在导入之前可以先检查一下是否有管理员权限,但我想知道如何通过 try/except 语句来捕捉这种特定的错误,以备将来参考。有没有办法区分这个 RuntimeError 和其他可能出现的错误呢?
6 个回答
5
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
更多关于异常处理的内容可以在教程中找到。
在我看来,这种情况应该会产生ImportError
。你也可以自己尝试一下:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
15
你可以查看异常的属性,以便和其他可能的 RuntimeError
异常区分开来。例如,如果异常的消息内容和你预设的不一样,就可以重新抛出这个错误。
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
当然,直接比较文本只是一个例子,你也可以查找包含的子字符串或者使用正则表达式。
值得注意的是,从 Python 2.6 开始,异常的 .message
属性已经被弃用了。你可以在 .args
中找到相关文本,通常是 args[0]
。
... 在 2.6 版本中,
message
属性被弃用,取而代之的是args
属性。
8
我知道在导入之前可以先检查是否有根权限,但我想知道如何通过try/except语句捕捉这种特定类型的错误,以备将来参考。有没有办法区分这种RuntimeError和其他可能出现的错误呢?
如果这个错误是由特定的条件引起的,那么我觉得捕捉这个错误最简单的方法就是先检查这个条件,然后你可以自己抛出一个更具体的错误。毕竟,错误在抛出之前就已经存在了,因为在这种情况下,这是环境的问题。
我同意上面的人说的——通过文本匹配来处理错误,这种想法有点可怕。