Python if 语句失败时的异常
Python Exceptions for when an if statement fails
我有一个简单的异常 class:
class Error(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
我还有一个 if 语句,我想根据失败的原因抛出不同的异常。
if not self.active:
if len(self.recording) > index:
# something
else:
raise Error("failed because index not in bounds")
else:
raise Error("failed because the object is not active")
这很好用,但是嵌套的 if
对于这么简单的东西来说看起来很乱(也许只有我这样)......我宁愿有像
这样的东西
if not self.active and len(self.recording) > index:
然后根据where/how if failed.
抛出异常
这样的事情可能吗?嵌套 if
(在第一个示例中)是 "best" 解决此问题的方法吗?
提前致谢!
**我使用的某些库需要 Python 2.7,因此,代码适用于 2.7
只有几个嵌套的 if
在我看来完全没问题...
但是,您可能会像这样使用 elif
:
if not self.active:
raise Error("failed because the object is not active")
elif len(self.recording) <= index:
# The interpreter will enter this block if self.active evaluates to True
# AND index is bigger or equal than len(self.recording), which is when you
# raise the bounds Error
raise Error("failed because index not in bounds")
else:
# something
如果 self.active
的计算结果为 False
,您将收到错误消息,因为该对象未激活。如果它是活动的,但是 self.recording
的长度小于或等于索引,你会得到第二个错误 index not in bounds ,在任何其他情况下,一切都很好,所以你可以安全地 运行 # something
编辑:
正如 @tdelaney 在他的评论中正确指出的那样,您甚至不需要 elif
,因为当您提出 Exception
时,您会退出当前范围,所以这应该做的:
if not self.active:
raise Error("failed because the object is not active")
if len(self.recording) <= index:
raise Error("failed because index not in bounds")
# something
我有一个简单的异常 class:
class Error(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
我还有一个 if 语句,我想根据失败的原因抛出不同的异常。
if not self.active:
if len(self.recording) > index:
# something
else:
raise Error("failed because index not in bounds")
else:
raise Error("failed because the object is not active")
这很好用,但是嵌套的 if
对于这么简单的东西来说看起来很乱(也许只有我这样)......我宁愿有像
if not self.active and len(self.recording) > index:
然后根据where/how if failed.
抛出异常这样的事情可能吗?嵌套 if
(在第一个示例中)是 "best" 解决此问题的方法吗?
提前致谢!
**我使用的某些库需要 Python 2.7,因此,代码适用于 2.7
只有几个嵌套的 if
在我看来完全没问题...
但是,您可能会像这样使用 elif
:
if not self.active:
raise Error("failed because the object is not active")
elif len(self.recording) <= index:
# The interpreter will enter this block if self.active evaluates to True
# AND index is bigger or equal than len(self.recording), which is when you
# raise the bounds Error
raise Error("failed because index not in bounds")
else:
# something
如果 self.active
的计算结果为 False
,您将收到错误消息,因为该对象未激活。如果它是活动的,但是 self.recording
的长度小于或等于索引,你会得到第二个错误 index not in bounds ,在任何其他情况下,一切都很好,所以你可以安全地 运行 # something
编辑:
正如 @tdelaney 在他的评论中正确指出的那样,您甚至不需要 elif
,因为当您提出 Exception
时,您会退出当前范围,所以这应该做的:
if not self.active:
raise Error("failed because the object is not active")
if len(self.recording) <= index:
raise Error("failed because index not in bounds")
# something