如何解决Python 3是否尝试/除最佳实践?
这是关于代码结构而不是语法的问题。我想知道什么是最佳做法,为什么。
import my_db_manager as dbm
def main_loop():
people = dbm.read_db()
#Todo: Write rest of programme doing something with the data from people...
if __name__ == '__main__':
main_loop()
然后,您有几个单独的.py文件,用于管理与数据库中各种表的交互。这些{.1 {.1}}文件是这样的:
my_db_manager
在上面的示例中,函数def read_db():
people = []
db = connection_manager.get_connection()
cursor = db.cursor()
try:
#Database reading statement
sql = 'SELECT disTINCT(name) FROM people'
cursor.execute(sql)
results = cursor.fetchall()
people = [x[0] for x in results]
except Exception as e:
print(f'Error: {e}')
finally:
return people
是从主类中的read_db()
调用的。 main_loop()
包含try / except子句,用于管理与数据库交互时的错误。尽管这可以正常工作,但可以在调用read_db()
时将try / except子句放在main_loop()
中。它们可以同样位于两个地方。使用try / except时,什么是“最佳实践”?在read_db()
中使用try / except还是在管理程序逻辑流的db_manager
中使用它,还是在两个地方都使用它?请记住,我正在给出上面的特定示例,但是我试图推断编写python时应用try / except的一般规则。
解决方法
在Python或其他任何地方编写try-except的最佳方法是尽可能地狭窄。捕获比您打算处理的更多的异常是一个常见的问题! (积分:This Answer)
在您的特定情况下,当然在函数内部。它:
a)为主线程从db错误创建抽象
b)消除了对db错误的怀疑,以防万一其他原因导致主线程内部发生异常(尽管您可以看到,但仍然会抓住最后的机会)
c)使您能够在一处处理所有与数据库有关的错误。高效和创新。您将如何在主线程的函数之外创建列表people
。它将变成一团糟。
最后,即使在函数可能发生异常的每个地方提供服务时,即使在函数内部,您也应坚持这种简约性:
def read_db():
#Database reading statement
sql = 'SELECT DISTINCT(name) FROM people'
try:
db = connection_manager.get_connection()
cursor = db.cursor()
cursor.execute(sql)
results = cursor.fetchall()
except Exception as e:
print(f'Error: {e}')
return []
else:
return [x[0] for x in results]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。