繁体   English   中英

Python函数包装一些异常代码

[英]Python function to wrap some exceptions code

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

编辑:这将按您描述的那样工作:

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 :(")

正如Christian所建议的,更好的方法是:

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.")

这些印刷品中只有一张会发生。

Python允许您在try/except语句中使用多个exception子句 将来自两个try块的所有代码添加到一个中,然后只需使用两个else子句即可捕获两个潜在的错误:

try: 
    #some code
except:
    #some code to e.g. print str
except: 
    #some code to e.g. print str or exit from the program.

这个怎么样? 但是,在通常情况下,您应该更具体地说明异常,请参见此处: https : //docs.python.org/3/tutorial/errors.html ,例如,将“ except ValueError”仅用于一种错误。

try:
    # ex1 code
except:
    # handle the exception
else:
    # ex2 code, will only run if there is no exception in ex1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM