在Python中如何使用try,except,else正确 [英] How to use try, except, else correctly in Python

查看:139
本文介绍了在Python中如何使用try,except,else正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我想知道哪个是正确的方法来写try语句。我是Python中错误处理的新手。



选项1

  try:
itemCode = items [itemCode]
dbObject = db.GqlQuery(SELECT * FROM%s WHERE code =:1%dbName,itemCode).get()
dbObject.delete()
除了AttributeError:
打印没有该代码的项目
除了KeyError:
打印参数名称
除了:
printUnknow error

选项2




itemCode = items [itemCode]
除了KeyError:
打印参数名称
else:
dbObject = db.GqlQuery(SELECT * FROM%s WHERE code =:1%dbName,itemCode).get()
try:
dbObject.delete()
except AttributeError:
print没有该代码的项目
除了:
打印Unknow错误

选项3
您可以想到的任何其他更好的选项。



选项1,我们看到我将所有代码包装在一个try块中。
选项2,它使用嵌套块。它会对特定行语句引发异常。



如果某个地方有错误,我将很乐意知道。

解决方案>

从蟒蛇的禅,平坦比巢好。我通常会选择#1风格,虽然我有点困惑,关于 dbObject = db.GqlQuery(SELECT .... dbObject.delete()引发一个 AttributeError 。无论如何,你不必调用$ c> dbObject.delete()多次。


So I want to know which is the right way to write try except statements. I'm new to error handling in Python.

Option 1

try:
    itemCode = items["itemCode"]
    dbObject=db.GqlQuery("SELECT * FROM %s WHERE code=:1" % dbName,itemCode).get()
    dbObject.delete() 
except AttributeError:
    print "There's no item with that code"
except KeyError:
    print "Bad parameter name"
except:
    print "Unknow error" 

Option 2

try:
    itemCode = items["itemCode"]
except KeyError:
    print "Bad parameter name"
else:    
    dbObject=db.GqlQuery("SELECT * FROM %s WHERE code=:1" % dbName,itemCode).get()
    try:    
        dbObject.delete() 
    except AttributeError:
        print "There's no item with that code"
    except:
        print "Unknow error" 

Option 3 Any other better option you can think of.

Option 1, we see that I wrap all the code in a try block. Option 2, it uses nested blocks. It raises an exception on specific line statements.

If there's an error somewhere I will be glad to know about it.

解决方案

From the zen of python, "flat is better than nested." I'd go with Option #1 style in general, though I'm a bit confused as to whether dbObject=db.GqlQuery("SELECT.... or dbObject.delete() raises an AttributeError. In any case though, you shouldn't have to call the dbObject.delete() more than once.

这篇关于在Python中如何使用try,except,else正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆