【发布时间】:2015-06-05 20:35:10
【问题描述】:
这是一个一般性和概念性的问题,不确定它是否在 SO 的范围内,但我会试一试。
我曾多次遇到类似以下情况,但一直不知道如何处理。
我有几个函数在某些层次结构中相互调用。我想处理函数的错误输入,但有些函数永远不会直接调用其他函数。
比如我有这个功能:
def getDataSourcesOfTypes(username, datatypes):
if len(datatypes) < 1:
raise ValueError("Please specify at least 1 datatype")
http = authorizeHttp(username)
...snip...
return data_sources_list
这叫:
def authorizeHttp(username):
if not isinstance(username, str):
raise ValueError("Invalid username.")
credential_json = Database.getCredential(username)
...snip...
这又叫这个:
def getCredential(username):
Database.connection.row_factory = sqlite.Row # @UndefinedVariable
cursor = Database.connection.cursor()
...snip...
result = cursor.fetchone()
if result is None:
raise LookupError("Username does not exist.")
else:
...snip...
现在,对于username,我有几个机会抓住一个坏的(即不是字符串、不存在等)。显然,直到我调用最后一个函数,我才能捕捉到它没有出现在数据库中的错误,但我可以在第一个函数之前捕捉到None。
问题是:捕捉异常的最佳位置在哪里?在层次结构的最底层?尽快?
再次,我认为这对于 SO 来说可能是一个过于主观的问题,但我真的很好奇什么被认为是最佳实践。
【问题讨论】:
标签: python python-2.7 exception