工作代码,但 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)
您在未涵盖所有可能性的条件块中设置 tmF
和 tmR
。例如,如果 primerF
>= 14,则永远不会在 list_tm = [tmF, tmR]
语句之前设置 tmF
。这将导致运行时错误,pycharm 警告您。
解决此问题的一种方法是在代码顶部设置 tmF
和 tmR
的默认值,或者通过设置 tmF
和 tmR
在 else
(不仅仅是 elif
)块中。
我最近才开始编程,所以这个问题可能有一个简单的答案,但我在这里找不到。我的代码可以很好地满足我想做的事情,但由于我是新手,所以我想开始练习编写可读性好的代码。我正在使用 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)
您在未涵盖所有可能性的条件块中设置 tmF
和 tmR
。例如,如果 primerF
>= 14,则永远不会在 list_tm = [tmF, tmR]
语句之前设置 tmF
。这将导致运行时错误,pycharm 警告您。
解决此问题的一种方法是在代码顶部设置 tmF
和 tmR
的默认值,或者通过设置 tmF
和 tmR
在 else
(不仅仅是 elif
)块中。