使用print()调用if-Statement / evoke中的函数 - 良好的做​​法?

时间:2017-02-04 09:49:16

标签: python python-3.x python-click tinydb

使用tinydb我有一个像这样的数据库操作的对象:

#database.py 
class DataBase(object):
    """CRUD access to database."""

    def __init__(self):
        """Initialize database."""
        self.db = TinyDB('/db.json')

    def new(self, **kwargs):
        """Add a new entry to the database."""
        if self.db.insert(kwargs): # 1
            return 'New item added to the database.'
        else:
            return 'Item NOT added to the database.'

方法'插入'从tinydb返回插入后的条目ID,参见#1。所以我使用此效果返回成功/失败消息,当使用print()调用该函数时可以显示该消息:

#main.py
#...
@entry.command('new')
@click.argument('first_arg', type=str)
@click.argument('second_arg', type=str)
def entry_new(**kwargs):
    """Create a new entry."""
    if kwargs is not None:
        click.echo(a_db.new(**kwargs)) # 2
#...

问题#1:

if self.db.insert(kwargs):

这是一个好的做法'在if-block的condition语句中执行insert函数?如果没有,根据返回值创建if / else语句的替代方法是什么?

问题#2:

click.echo(a_db.new(**kwargs))

将文件插入数据库的整个过程都包含在print语句中,以便能够访问insert函数的返回值。 这是一个很好的做法吗?或者有更好的方法来调用插入函数,访问返回值并打印出来吗?

提前感谢您的澄清!

1 个答案:

答案 0 :(得分:1)

很难说什么是'良好做法',因为人们往往对他们的看法有不同的看法。

1:你没有在其他地方使用返回的值,所以只在条件语句中使用它似乎没问题。如果insert方法引发了一些异常,你将不得不处理它,但它似乎并没有。

2:与数字1相同的答案。如果你不再使用变量,那么就可以这样了。