python - 变量不能被定义

标签 python django pycharm

我有这段代码:

from django.db import transaction

with transaction.atomic():
    try:
        variable = 1
    except Exception:
        raise Exception()

print(variable)

pycharm(2018.1.2)告诉我,print函数中的变量不能被定义。什么情况下会发生?或者是 pycharm 的 bug?

最佳答案

in which case it can happen?

如果上下文管理器吞下异常,并且将 raise 语句替换为在到达 print(variable) 之前不会中断执行流的其他内容> 线。

根据经验:不依赖于条件(最一般含义)的代码不应使用有条件定义的名称,并且只有与定义名称的分支属于同一分支的代码才应该使用访问该名称。

即使您“知道”在当前实现中如果未定义,则永远不会访问此名称(如您的示例中所示),任何微小的实现更改都可能会破坏此前提条件,而您可能不会不一定会注意到它,也没有足够的单元测试覆盖率来确保您的测试能够发现问题。我经常看到这种情况发生,有时该错误仅在更改几个月后才出现(通常在一些非常罕见的病态极端情况的错误处理代码中)。

长话短说,在条件部分之前无条件地使用一些标记值(None 或任何其他有意义的值)定义名称将确保您的代码不会中断在本来应该是小的代码更改之后出乎意料地发生了。

关于python - 变量不能被定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327242/

相关文章:

python - 向自定义 resnet 18 架构添加简单的注意力层会导致前向传递错误

python - 按 id 过滤最大数量

python - MAC 中的 2 个 mysql 实例

Django-如何使用电子邮件而不是用户名的内置登录 View ?

pycharm - 是否可以在 Pycharm 中映射一个制表符以产生 4 个空格。如果是这样怎么办?

python - 如何将短语列表转换为单词列表?

python - 如何提取支票/支票图像中的帐号

python - 如何在 Django 管理面板的 modelAdmin 中仅显示日期时间字段中的日期?

python - 如何在 PyCharm 中设置最大行长?

python pycharm依赖同步