微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 3是否尝试/除最佳实践?

如何解决Python 3是否尝试/除最佳实践?

这是关于代码结构而不是语法的问题。我想知道什么是最佳做法,为什么。

想象一下您有一个python程序。您有一个像这样的主班:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?