【发布时间】:2020-06-27 22:26:14
【问题描述】:
当我尝试运行我的代码时,出现名称错误:
Traceback (most recent call last):
File "dna.py", line 24, in <module>
main ()
File "dna.py", line 15, in main
STR_searcher()
File "dna.py", line 19, in STR_searcher
STR_dict = dict.fromkeys(range(1, len(database.fieldnames)))
NameError: name 'database' is not defined
当我将辅助函数放在顶部时,程序可以运行,但我计划使用更多函数,因此我想将它们放在底部并将第一个定义为 main。我也尝试过使用if __name__ == "__main__": main(),但这也没有用。那么如何在确保定义所有内容的同时将其他函数放在 main 之下?
from sys import argv, exit
import csv
from collections import OrderedDict
def main():
if len(argv) != 3:
print("Usage: python dna.py data.csv sequence.txt")
exit(1)
with open(argv[1]) as csv_file:
database = csv.DictReader(csv_file)
with open(argv[2]) as txt_file:
sequence = txt_file.read()
STR_searcher()
def STR_searcher():
STR_dict = dict.fromkeys(range(1, len(database.fieldnames)))
for i in range(len(STR_dict)):
for j in range(len(sequence)):
print("hello")
main ()
【问题讨论】:
-
我想我不明白为什么您希望在
main中创建的database值可以在STR_searcher中使用。您是否还期望csv_file和txt_file在那里可用? -
“那么我怎样才能将我的其他函数放在 main 之下,同时确保所有内容都已定义?”看来您认为问题是由在
STR_searcher之前定义main()引起的?这是不正确的。 -
@KarlKnechtel 我在 3 周前开始编码,并在 3 天前开始使用 python,所以说实话我总体上很困惑。我之前使用过 C,所以我习惯于在使用变量之前定义我的变量,并且当
STR_searcher函数高于程序的其余部分时,我的程序工作,所以这就是为什么这对我来说是个问题。 -
无论您将函数放入的顺序如何,您尝试执行的操作在 C 中也不起作用。我认为您可能还误解了“定义变量”在 C 中的工作方式。一般这里需要理解的概念是变量范围。
标签: python nameerror traceback