2017-09-20 129 views
-1

我是一名Python初学者,我有一个非常简单的练习。 我把我的Hello World项目分成三个文件。Python TypeError:列表索引必须是整数,而不是类型

1.run.py包含主代码。

run.py 
-------------------------------- 
#!/usr/bin/python 

import lib 

lib.hw() 
printer = lib.hw() 
print(printer) 

2.lib.py函数。

lib.py 
-------------------------------- 
import data 
def hw(): 
    return(data.messages[0]) 

3.data.py清单。

data.py 
-------------------------------- 
messages = [ "Hello, World!", "It Works" ] 

如果你运行run.py它会打印出“Hello,World!”。

我想添加一种方法来选择打印出列表中的哪个值。 所以我在run.py中添加一个输入promt并将该int存储在变量“choice”中,然后我想将它推送到文件lib.py“[0]”中的“list indices”,以便我可以决定哪个值我想打印出来。当然,我写它的方式不起作用,它只是为了解释我即将做的事情。

run.py 
-------------------------------- 
#!/usr/bin/python 
import lib 

print("Enter 0 or 1 to print a Message!") 
choice = int(input("Enter 0 or 1: ")) 

lib.hw() 
printer = lib.hw() 
print(printer) 

这里我用[choice]替换了[0]。

lib.py 
-------------------------------- 
import data 
def hw(): 
    return(data.messages[choice]) 

当然,这将导致一个错误:

/functions/lib.py", line 5, in hw 
    return(data.messages[choice]) 
TypeError: list indices must be integers, not type 

我怎么能以最简单的方式解决这个问题?

+0

你不及格'choice'到'lib.hw()'。 – bereal

+0

我真的不知道该怎么做。 – benice

+1

你可以在'return(data.messages [choice])之前放一个'print(选择)'语句'并告诉我你得到了什么? – Stael

回答

0

通行证choicelib.hw()功能,并且还修改hw()功能lib.py采取参数choice

run.py 
-------------------------------- 
#!/usr/bin/python 
import lib 

print("Enter 0 or 1 to print a Message!") 
choice = int(input("Enter 0 or 1: ")) 

printer = lib.hw(choice) 
print(printer) 

lib.py 
-------------------------------- 
import data 
def hw(choice): 
    return(data.messages[choice]) 
+0

非常感谢!删除lib.hw()并在两个文件中添加选项都有诀窍。我现在明白我没有考虑过什么。 – benice

+1

这看起来像它会工作,但你知道为什么OP得到'TypeError:列表索引必须是整数,而不是'NameError:name'选项'没有定义'(这是我所期望的) 。如果定义了它,为什么它是一个类型? – Stael

0

你需要告诉你选择的功能。在python中,变量不会在多个文件上共享。你需要从run.py改变def hw():def hw(choice):printer = lib.hw()printer = lib.hw(choice)

相关问题