我以这种方式在Python中捕获两个异常:
#ex1
try:
#some code
except:
#some code to e.g. print str
#ex2
try:
#some code
except:
#some code to e.g. print str or exit from the program.
如果ex1引发异常,那么我想跳过ex2。 如果ex1没有引发异常,我想尝试ex2。
最优雅的编码方式是什么?
我目前的方法是将它包装在一个功能块中,如下所示,并在正确的位置使用return:
def myExceptions(someArgs):
#ex1
try:
#some code
except:
#some code
return
#ex2
try:
#some code
except:
#some code
然后我只是在正确的地方调用函数myExceptions(someArgs)
答案 0 :(得分:3)
编辑:这将按照您描述的那样工作:
try:
msg = make_msg_fancy(msg)
msg = check_for_spam(msg)
except MessageNotFancyException:
print("couldn't make it fancy :(")
except MessageFullOfSpamException:
print("too much spam :(")
当发生异常时,它会跳过try块的其余部分并继续异常...它不会返回。
你正在做这样的事情:
for person in [{"dog": "Henry"}, {}, {"dog": None}]:
try:
doggo = person['dog'] # can throw KeyError
except KeyError:
print("Not a dog person")
continue # skip the rest of the loop (since this is a for loop)
try:
print(doggo.upper()) # can throw AttributeError
except AttributeError:
print("No doggo :(")
更好的方法是,正如克里斯蒂安所说:
for person in [{"dog": "Henry"}, {}, {"dog": None}]:
try:
doggo = person['dog'] # can throw KeyError
print(doggo.upper()) # can throw AttributeError
except KeyError: # person dict does not contain a "dog"
print("Not a dog person")
except AttributeError: # dog entry cannot be .upper()'d
print("invalid doggo :(")
两者都输出:
HENRY
Not a dog person
invalid doggo :(
请注意,如果第一个集合失败,这将自动跳过第二组行,并允许您根据发生的异常执行不同的操作。
我觉得你很困惑。在KeyError
之后,在except
块之后继续执行。跳过try:
的其余部分,这就是您想要的内容:
这就是我能做的原因:
try:
dct[key] += value
print("Added.")
except KeyError:
dct[key] = value
print("New key.")
只会打印其中一张。
答案 1 :(得分:1)
Python allows you to use multiple exception clause in your try/except
statements。将两个try块中的所有代码添加到一个中,只需使用两个except子句来捕获两个可能的错误:
try:
#some code
except:
#some code to e.g. print str
except:
#some code to e.g. print str or exit from the program.
答案 2 :(得分:0)
这个怎么样?但是,您通常应该更具体地使用例外情况,请参阅此处:https://docs.python.org/3/tutorial/errors.html 例如,除了一种类型的错误外,只使用“除了ValueError”。
try:
# ex1 code
except:
# handle the exception
else:
# ex2 code, will only run if there is no exception in ex1