python - 断言所有输出 - 这是一个好习惯吗?
问题描述
我在所有输出上都使用断言是一个好习惯吗?这段代码也干净易读吗?谢谢!
#!/usr/bin/env python
import pyodbc
import secret as credentials
class DatabaseManager:
def __init__(self):
self.database_user_name = credentials.Secret.mssql["database_username"]
self.database_password = credentials.Secret.mssql["database_password"]
self.database_server_name = credentials.Secret.mssql["database_server"]
self.database_name = credentials.Secret.mssql["database_name"]
self.database_string = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=' \
+ self.database_server_name + ';DATABASE=' \
+ self.database_name + ';UID=' \
+ self.database_user_name + ';PWD=' \
+ self.database_password \
+ ';Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'
self.database_connection = pyodbc.connect(self.database_string)
class AccountManager:
def __init__(self, account_email, account_name):
self.account_email = account_email
self.account_name = account_name
def get_account_by_email(self):
db_init = DatabaseManager()
db_cursor = db_init.database_connection.cursor()
db_cursor.execute(""" SELECT [account_email] FROM [dbo].[account]
WHERE account_email = ? """, self.account_email)
row: object = db_cursor.fetchone()
# verify and return
assert isinstance(row, object)
print(row)
def get_account_by_name(self):
db_init = DatabaseManager()
db_cursor = db_init.database_connection.cursor()
db_cursor.execute(""" SELECT [account_name] FROM [dbo].[account]
WHERE account_name = ? """, self.account_name)
row: object = db_cursor.fetchone()
# verify and return
assert isinstance(row, object)
print(row)
class ContractManager:
def __init__(self):
pass
解决方案
在 Python 中,一切都是对象。你拥有的 assert 语句将捕获布尔值、整数、列表等所有内容。
您说过有时会从数据库返回一个整数。如果这是一个问题,您应该引发错误而不是使用断言语句。
断言应用作现场执行的快速测试,以验证一切是否符合您对数据外观的期望,然后再继续进行。请记住,断言语句在生产模式下被禁用。您只想使用它们来验证您认为永远不可能正确的条件,但就像可以让您放心的快速理智检查一样,您无论如何都要进行检查。如果有某种方式可以使条件为真,您应该改用异常,以便在生产环境中引发实际错误。
另外,请注意,类型提示可以涵盖许多断言语句曾经用于的事情。
推荐阅读
- node.js - 有没有办法列出目录 node.js 中所有文件的文件扩展名?
- c++ - 来自 C++ SDK 的 IF 语句措辞不正确
- python - 如何让我的项目在重新启动后记住变量/列表?
- javascript - 图像滑块需要额外单击 1 次才能重置。无法修复
- google-apps-script - 电子邮件通知中出现错误“异常:单元格引用超出范围”
- javascript - 如何设置在线服务器以不断执行我的 javascript 代码?
- xcode - Flutter运行和flutter pub sec报错| 颤振驱动程序
- google-cloud-functions - 由 Pub Sub 触发的 Cloud Function 未发布预期消息
- linux - 单个大文件上的 OverlayFS
- tailwind-css - 如何使用 Tailwindcss 创建一个真正的粘性页眉/页脚(即使滚动也会粘在底部)?