我正在查看try以及那里列出的内置值的文档,但我弄清楚我应该使用什么来捕获一般函数失败。这就是我的意思,说我有这些: 的 foo.py
def create_apples(x,y,z):
appleMaker = appleMaker()
appleMaker.maker(x,y,z)
def create_bananas(x,y,z):
bananaMaker = BananaMaker()
bananaMaker.maker(x,y,z)
if __name__ == '__main__':
x = 1
y = 2
z = 3
create_apples(x, y, z)
create_bananas(x, y, z)
使用appleMaker.py:
from random import randint
class appleMaker:
def __init__(self):
self.bushelID
self.numberCreated
def maker(x, y, z):
self.bushelID = randint(0,9)
self.numberCreated = x + y + z
和BananaMaker.py分别与appleMaker.py完全相同。我想要做的就是foo,比如:
try:
create_apple(x,y,z)
except Exception:
print "informative information"
sys.exit(1)
答案 0 :(得分:1)
通常,您会阅读create_apple()
的文档,了解它可以引发的异常,并抓住这些异常。
与Java不同,Python函数不需要声明它们可以引发的所有可能的异常,因此可以想象任何函数都会引发许多不同的异常。
你最好的选择可能是最后的某种情况:
try:
create_apple(x,y,z)
except NoTreeFound:
print 'could not find an apple tree'
except BasketFull:
print 'apple basket is already full of apples'
except Winter:
print 'Cannot create apples in winter!'
except Exception as e:
print 'an unknown error occurred, message is: %s' % str(e)
看来你正在寻找关于函数如何引发异常的建议,而不是调用者应该如何捕获它们。
如果你的函数可能以几种不同的方式失败,那么为每个失败条件定义特定的异常对调用者来说很方便,因为它可以轻松地分别处理每个失败条件(正如我在上面的例子中所示)。
但是如果你的函数真的只能以某种方式失败,在某些情况下可能会略有不同的细节,那么最好的办法就是用特定的消息引发一般异常:
raise Exception("my coffee is too cold")
最终这是一个设计决定。这两种方式都有效。