我得到了一个IndexError:列表索引超出范围在sys.argv中[1]

问题描述:

我想绘制这个代码,但它进入我得到了一个IndexError:列表索引超出范围在sys.argv中[1]

IndexError: list index out of range in the line: k = float(sys.argv[1])

谁能帮助我如何解决这一问题?

canWidth=500 
canHeight=500 
**strong text** 
def setupWindow() : 
    global win, canvas 
    from tkinter import Tk, Canvas, Frame 
    win = Tk() 
    canvas = Canvas(win, height=canHeight, width=canWidth) 
    f = Frame (win)  
    canvas.pack() 
    f.pack() 

def startApp() : 
    global win, canvas 
    import sys 
    k1 = float(sys.argv[1]) # starting value of K 
    k2 = float(sys.argv[2]) # ending value of K 
    x = .2      # is somewhat arbitrary 
    vrng = range(200)   # We'll do 200 horz steps 
    for t in range(canWidth) : 
     win.update() 
     k = k1 + (k2-k1)*t/canWidth 
     print ("K = %.04f" % k) 
     for i in vrng : 
      p = x*canHeight 
      canvas.create_line(t,p,t,p+1) # just makes a pixel dot 
      x = x * (1-x) * k    # next x value 
      if x <=0 or x >= 1.0 : 
       print ("overflow at k", k) 
       return 

def main() : 
    setupWindow()  # Create Canvas with Frame 
    startApp()   # Start up the display 
    win.mainloop()  # Just wait for user to close graph 

if __name__ == "__main__" : main() 
+2

您是如何启动该计划的? –

+4

你是否用至少两个命令行参数运行脚本?例如'python3 script.py arg1 arg2' –

+1

如果你用'python filename.py'启动它,你会得到这个错误。例如,如果您使用'python filename.py 1 2'启动它,则不会出现错误。我希望这是明确的原因。 – Michael

它看起来像程序期待2浮动命令行参数。 `

k1 = float(sys.argv[1]) # starting value of K 
k2 = float(sys.argv[2]) 

`

所以你shuld可能的东西推出像

python main.py 100 200 

走多到细节,你的代码读取command line arguments,它的期望那里是他们的2 ,也可以解析为浮点值。 通常,第一个命令行参数是脚本文件本身,所以sys.argv总是至少有一个元素长。

这就是说,你可以按照上面的建议做,并且在启动脚本时传递2个浮点数,或者编辑脚本和硬编码2值而不是从命令行读取的值,如

k1 = 100 
k2 = 200 
+0

非常感谢!这真的很有帮助。然后,我每次想运行代码时都按了F5。现在我知道如何使用sys,argv。 –