如何在Python生产源码中使用assert?

问题描述 投票:0回答:0

我们正在寻找在多个 Django 项目或同一项目的组件之间共享的自开发库,而不是已发布的开源库。

问题:

我们想知道是否可以使用

assert
来验证变量的值。

我们没有找到关于这个主题的在线文章,所以如果是,我们怎么办?

更多信息:

  1. 我们想法的一个例子:
    我们正在考虑下面的示例,该示例验证输入
    logic
    等于
    and
    or
    。而且设计似乎比使用
    else
    子句假设值必须是另一个更好。
if logic == 'and':
    main_Q = main_Q & filter_Q
elif logic == 'or':
    main_Q = main_Q | filter_Q
else:
    assert False, "Invalid value of `logic`, it needs to be either `and` or `or`."

或:

if logic == 'and':
    main_Q = main_Q & filter_Q
else:
    assert logic == 'or'
    main_Q = main_Q | filter_Q
  1. 我们在已发布的开源库中找到了
    assert
    的用法。
    grep "assert" -v "test"
    目录下做
    site-packages
    搜索,在
    assert
    amqp
    argparse
    billiard的库中,发现函数源码中有多个
    celery
    语句,不是测试用的
    dateutil
    decorator
    distlib
    等。但是,使用 assert 似乎是一种高级技术,我们需要帮助来查找有关操作方法的文章。
./amqp/sasl.py:        assert isinstance(mechanism, bytes)
./amqp/sasl.py:        assert isinstance(response, bytes)
Binary file ./amqp/__pycache__/sasl.cpython-37.pyc matches
./argparse.py:        assert self._current_indent >= 0, 'Indent decreased below 0.'
./argparse.py:                assert ' '.join(opt_parts) == opt_usage
./argparse.py:                assert ' '.join(pos_parts) == pos_usage
./argparse.py:            assert action_tuples
./arrow-0.17.0.dist-info/LICENSE:      incurred by, or claims asserted against, such Contributor by reason
./attr/_compat.py:            raise AssertionError  # pragma: no cover
./attr/_compat.py:            raise AssertionError  # pragma: no cover
Binary file ./attr/__pycache__/_compat.cpython-37.pyc matches
./billiard/connection.py:                    assert waitres == WAIT_OBJECT_0
./billiard/connection.py:            assert err == 0

... and many more matches ...

  1. 我们在测试中验证断言仅使一个线程完成传入的 HTTP 请求失败,而不会使整个 Django 项目失败。所以,不用担心过度杀伤,但我们也想得到专家的证实。

我们非常感谢任何提示和建议。

python django assert
© www.soinside.com 2019 - 2024. All rights reserved.