Python函数包含一些异常代码

时间:2017-05-02 22:27:15

标签: python function exception

我以这种方式在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)

3 个答案:

答案 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