在Python中如何使用try,except,else正确 [英] How to use try, except, else correctly in Python
问题描述
所以我想知道哪个是正确的方法来写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屋!