工作代码,但 pycharm 将列表中的 tmF 和 tmR 标记为 "local variable referenced before assignment",这是为什么?

Working code but pycharm marks tmF and tmR in list as "local variable referenced before assignment", why is this?

我最近才开始编程,所以这个问题可能有一个简单的答案,但我在这里找不到。我的代码可以很好地满足我想做的事情,但由于我是新手,所以我想开始练习编写可读性好的代码。我正在使用 PyCharm 并且我注意到它将下面的一些代码标记为未定义。我对全局变量和局部变量了解一点,我想这与此有关,但如果是这种情况,我无法弄清楚为什么这部分代码完全有效。

if len(primerF) < 14:
    tmF = (no_A_F + no_T_F) * 2 + (no_C_F + no_G_F) * 4
    float_tmF = float(tmF)
    print("Forward primer tm: " + str(float_tmF))

elif len(primerR) > 13:
    tmR = 64.9 + 41*(no_C_R + no_G_R - 16.4) / (no_A_R + no_T_R + no_G_R + 
    no_C_R)
    print("Reverse primer tm: " + str(tmR))

if len(primerR) < 14:
    tmR = (no_A_R + no_T_R) * 2 + (no_C_R + no_G_R) * 4
    print("Reverse primer tm: " + str(tmR))

elif len(primerR) > 13:
    tmR = 64.9 + 41*(no_C_R + no_G_R - 16.4) / (no_A_R + no_T_R + no_G_R + 
    no_C_R)
    print("Reverse primer tm: " + str(tmR))

gc_F = (no_G_F + no_C_F)
gc_content_F = float(gc_F) / forward_length * 100
print("Forward GC content: " + str(gc_content_F) + "%")

gc__R = (no_G_R + no_C_R)
gc_content_R = float(gc__R) / reverse_length * 100
print("Reverse GC content: " + str(gc_content_R) + "%")

这里的这个块被标记为名称未定义,如果我点击气泡,它会显示:"This inspection warns about local variables referenced before assignment"。

list_tm = [**tmF**, **tmR**]
high_tm = max(list_tm)
low_tm = min(list_tm)

您在未涵盖所有可能性的条件块中设置 tmFtmR。例如,如果 primerF >= 14,则永远不会在 list_tm = [tmF, tmR] 语句之前设置 tmF。这将导致运行时错误,pycharm 警告您。

解决此问题的一种方法是在代码顶部设置 tmFtmR 的默认值,或者通过设置 tmFtmRelse(不仅仅是 elif)块中。