我想捕获一个特定的ValueError,而不仅仅是任何ValueError。
我试过这样的事情:
try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except: ValueError, 'For STRING = ’WPF’, this machine is not a wind machine.':
pass
但这会引发SyntaxError:无法分配给文字。
然后我尝试了:
try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except ValueError, e:
if e != 'For STRING = ’WPF’, this machine is not a wind machine.':
raise ValueError, e
但这引发了例外,即使这是我要避免的例外。
在except ValueError,e
,e
是例外,而不是字符串的实例。因此,当您测试e
不等于特定字符串时,该测试始终为False。尝试:
if str(e) != "..."
代替。
例:
def catch(msg):
try:
raise ValueError(msg)
except ValueError as e: # as e syntax added in ~python2.5
if str(e) != "foo":
raise
else:
print("caught!")
catch("foo")
catch("bar")
通常,如果可以帮助您,您并不是真的希望依赖于错误消息-这太脆弱了。如果您可以控制callable macdat
,而不是引发ValueError
in
macdat
,则可以引发自定义异常,该异常继承自ValueError
:
class MyValueError(ValueError): pass
然后,您只能捕获MyValueError
并让其他ValueError
s继续被其他事物捕获(或不捕获)。Simpleexcept ValueError
仍然也会捕获这种类型的异常,因此它在其他代码中的行为应相同,这也可能从此函数捕获ValueErrors。
问题内容: 说我有以下 遇到SpecificException会发生什么?它是否首先将其捕获为通用异常,然后捕获特定异常? 还是只在忽略通用异常的同时捕获SpecificException。 我不希望泛型和特殊异常都被捕获。 问题答案: 否。所有异常都将被第一个块捕获。第二个将永远不会到达(编译器会识别出来,由于代码无法到达而导致错误)。如果要特别对待,则必须采用另一种方法: 然后,第一个块将捕获
问题内容: 我想捕获一个特定的http错误,而不是整个家庭中的任何一个..我想做的是- 但是我最终捕获的是任何一种HTTP错误,但是我只想在指定的网页不存在的情况下捕获!可能是HTTP错误404 ..但我不知道如何指定仅捕获错误404并让系统为其他事件运行默认处理程序。 问题答案: Python 3 Python 2 只是捕获,处理它,如果不是Error 404,只需使用引发该异常即可。 请参阅P
问题内容: 我如何编写一个块来捕获所有异常? 问题答案: 你可以,但你可能不应该: 但是,这也会捕获类似的异常,而你通常不希望那样,对吗?除非你立即重新引发异常,否则请参阅docs中的以下示例:
export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status
前面我们学习的多 catch 代码块虽然客观上提高了程序的健壮性,但是也导致了程序代码量大大增加。如果有些异常种类不同,但捕获之后的处理是相同的,例如以下代码。 3 个不同类型的异常,要求捕获之后的处理都是调用 methodA 方法。为了解决这种问题, Java 7 推出了 多异常捕获技术,可以把这些异常合并处理。上述代码修改如下: 注意:由于 FileNotFoundException 属于 I
这是我第一次问有关stackoverflow的问题。对不起,我的英语很差,英语不是我的母语。 我写了这样一个try/except条款: 当结果中没有“主机名”键时,它会出现一个KeyError异常。当我运行我的代码时,我看到异常已经被捕获,因为logger.error(e)在我的日志文件中放置了一个日志。但是它仍然引发了一个异常,没有返回这个{“retcode”: 1,“描述”:“失败”}。 异常