【发布时间】:2020-10-26 01:37:50
【问题描述】:
- 编写一个函数,接收任意字符串,如果字符串包含字母“k”则引发 ValueError,如果包含字母“l”则引发 KeyError。
没关系:
def string_error_raiser(s):
if 'k' in s:
raise ValueError("The string contains the letter 'k'!")
elif 'l' in s:
raise KeyError("The string contains the letter 'l'!")
- 编写一个 try/except 块,在任意输入上调用该函数。如果有 ValueError,它应该打印出一些解释,并重新引发任何 KeyErrors。它不应该能够处理任何其他错误类型。如果没有发生错误,打印“Home safe”,不管发生什么,打印“wheeeeeee”。
我的尝试:
s = input("Please enter a string below:\n")
try:
string_error_raiser(s)
print("Home safe")
except ValueError:
print("ValueError: the string contains the letter 'k'")
# how to re-raise any KeyError here?
finally:
print("wheeeeeee")
问题是,如果输入字符串s 同时包含k 和l,那么函数string_error_raiser 只会引发我正在捕获的ValueError,从而使我无法重新引发KeyError。而且我不知道如何解决这个问题。问题是设计不当,还是我在这里遗漏了什么?
【问题讨论】:
-
为什么要引发这两个异常?这是正常行为。程序在第一个引发的异常处停止。
标签: python error-handling try-catch