在 Python 中捕获特定错误消息
catch specific error message in Python
我需要在我的一个依赖项抛出特定的 ValueError 时捕捉并以某种方式处理它,否则重新引发错误。
我没有发现任何最近的问题以符合 Python 3 的方式处理这个问题,并且处理的是唯一区分返回错误的是字符串消息的情况。
这个post可能是最接近的:Python: Catching specific exception
像这样的东西 -- -- 不会工作,因为我没有使用像 HTTP 错误那样也提供特定代码的依赖项。
这是我的尝试:
try:
spect, freq_bins, time_bins = spect_maker.make(syl_audio,
self.sampFreq)
except ValueError as err:
if str(err) == 'window is longer than input signal':
warnings.warn('Segment {0} in {1} with label {2} '
'not long enough for window function'
' set with current spect_params.\n'
'spect will be set to nan.')
spect, freq_bins, time_bins = (np.nan,
np.nan,
np.nan)
else:
raise
如果重要,依赖性是 scipy,我需要在频谱图因特定原因失败时捕捉(我正在获取频谱图的片段比 window 函数短).
我意识到我的方法很脆弱,因为它依赖于错误字符串不变,但错误字符串是唯一将它与同一函数返回的其他 ValueErrors 区分开来的东西。所以我打算进行单元测试来抵御这种情况。
好的,所以根据其他人的评论,我猜应该是这样的:
# lower-level module
class CustomError(Exception):
pass
# in method
Class Thing:
def __init__(prop1):
self.prop1 = prop1
def method(self,element):
try:
dependency.function(element,self.prop1)
except ValueError as err:
if str(err) == 'specific ValueError':
raise CustomError
else:
raise # re-raise ValueError because string not recognized
# back in higher-level module
thing = lowerlevelmodule.Thing(prop1)
for element in list_of_stuff:
try:
output = thing.method(element)
except CustomError:
output = None
warnings.warn('set output to None for {} because CustomError'.
format(element))
我需要在我的一个依赖项抛出特定的 ValueError 时捕捉并以某种方式处理它,否则重新引发错误。 我没有发现任何最近的问题以符合 Python 3 的方式处理这个问题,并且处理的是唯一区分返回错误的是字符串消息的情况。
这个post可能是最接近的:Python: Catching specific exception
像这样的东西 -- -- 不会工作,因为我没有使用像 HTTP 错误那样也提供特定代码的依赖项。
这是我的尝试:
try:
spect, freq_bins, time_bins = spect_maker.make(syl_audio,
self.sampFreq)
except ValueError as err:
if str(err) == 'window is longer than input signal':
warnings.warn('Segment {0} in {1} with label {2} '
'not long enough for window function'
' set with current spect_params.\n'
'spect will be set to nan.')
spect, freq_bins, time_bins = (np.nan,
np.nan,
np.nan)
else:
raise
如果重要,依赖性是 scipy,我需要在频谱图因特定原因失败时捕捉(我正在获取频谱图的片段比 window 函数短).
我意识到我的方法很脆弱,因为它依赖于错误字符串不变,但错误字符串是唯一将它与同一函数返回的其他 ValueErrors 区分开来的东西。所以我打算进行单元测试来抵御这种情况。
好的,所以根据其他人的评论,我猜应该是这样的:
# lower-level module
class CustomError(Exception):
pass
# in method
Class Thing:
def __init__(prop1):
self.prop1 = prop1
def method(self,element):
try:
dependency.function(element,self.prop1)
except ValueError as err:
if str(err) == 'specific ValueError':
raise CustomError
else:
raise # re-raise ValueError because string not recognized
# back in higher-level module
thing = lowerlevelmodule.Thing(prop1)
for element in list_of_stuff:
try:
output = thing.method(element)
except CustomError:
output = None
warnings.warn('set output to None for {} because CustomError'.
format(element))