【问题标题】:How to use raw_input with argv?如何将 raw_input 与 argv 一起使用?
【发布时间】:2014-09-04 21:25:22
【问题描述】:

我正在学习 Python The Hard Way 中的 ex13

我正在尝试通过:

python ex13.py raw_input() raw_input() raw_input()

我的代码如下:

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

我不断收到的错误是:

Traceback (most recent call last):
 File "ex13.py", line 5, in <module>
   script, first, second, third = argv
ValueError: too many values to unpack

我想知道为什么会出现这个错误以及如何解决它

【问题讨论】:

  • 你不能通过raw_input()!以下对我来说很好:python test.py 1 2 3
  • 您使用的是什么操作系统?
  • 当您通过raw_input() 时,它实际上不会允许原始输入。在命令行中,它将从 argv 传递 arg1、arg2 和 arg3 字符串 raw_input,arg0 仍将保留脚本名称。但是,这不应该引发错误,因为 argv 会产生值
  • 要修复“太多值”异常,你真的需要print argv 看看那里有什么。这仍然无法解决@ZWiki 提出的问题(命令行参数只是字符串,而不是要执行的代码,因此您只需将字符串'raw_input()' 作为first 的值,等等——假设您的 shell 不会尝试将其解释为函数调用(例如,bash 会,但 cmd 不会),但它会让您克服异常,因此您可以解决该问题,即是进步。

标签: python argv raw-input


【解决方案1】:

我自己目前正在经历 LPTHW,并且刚刚完成了这个练习。我认为作者的意思是他希望你在同一个脚本中同时使用argvraw_input()。他并不是要你将它们本身结合在同一个论点或同一行或其他任何东西中。事实上,他提到的“学生常见问题”之一就是处理这个问题。他说

不要想太多。只需在使用raw_input() 的脚本末尾添加两行即可获取某些内容,然后将其打印出来。从此开始尝试在同一个脚本中使用更多方法。

虽然晚了 2 个月,但希望对您有所帮助。

这就是我修改脚本以完成有问题的“学习练习”的方式:

from sys import argv

script, first, second, third = argv
fourth = raw_input("What is your fourth variable? ")

print "All together, your script is called %r, your first variable is %r, your second is %r, your third is %r, and your fourth is %r" % (script, first, second, third, fourth)

【讨论】:

    【解决方案2】:

    您不能“将raw_input()argv 一起使用”。 argv 提供了您在运行程序之前指定的数据raw_input() 是一个Python 函数,即你的程序可以做的事情。 命令行 - 您在其中键入python 命令以运行您的程序 - 是一个与程序本身完全分开的

    【讨论】:

      【解决方案3】:

      如果您正在尝试完成 Learn Python the Hard Way 中的练习 13 学习练习,那么您正在尝试将 argv 和 raw_input() 结合起来。作者建议您使用 raw_input() 从用户那里获得更多输入。

      在这个帖子的帮助下,我想出了这个:

      from sys import argv
      
      ScriptName, first, second, third = argv
      
      print "What is your fourth variable?"
      fourth = raw_input()
      print "What is your fifth variable?"
      fifth = raw_input()
      print "What is your sixth variable?"
      sixth = raw_input()
      
      print "The script is called: ", ScriptName
      print "Your first variable is: ", first
      print "Your second variable is: ", second
      print "Your third variable is: ", third
      print "Your fourth variable is: ", fourth
      print "Your fifth variable is: ", fifth
      print "Your sixth variable is: ", sixth
      
      print "For your script %r, these are the variables: %r, %r, %r, %r, %r,
          and %r." % (ScriptName, first, second, third, fourth, fifth, sixth)
      

      这似乎是作者的建议吗?

      【讨论】:

        【解决方案4】:

        我认为这就是作者的意思(使用 argv 获取输入并使用 int raw_input()):-

        from sys import argv
        
        script, first, second, third, take_input = argv
        
        print "The script is called:", script
        print "Your first variable is:", first
        print "Your second variable is:", second
        print "Your third variable is:", third
        
        raw_input(take_input + "? ")
        

        【讨论】:

          【解决方案5】:

          由于作者在学习练习中的指示很明确:“将raw_inputargv 结合起来制作一个从用户那里获得更多输入的脚本。”,您可以使用add另一行询问第四个输入。

          fourth = raw_input("Enter the fourth value: ")    
          print "Your fourth variable is: ", fourth    
          

          或者查看您的代码,我认为您过度认为它就像“制作一个从用户那里获取输入的脚本”,这样做

          from sys import argv
          
          script, first, second, third = argv, raw_input("Enter first value: "), raw_input("Enter second value: "), raw_input("Enter third value: ")
          
          print "The script is called:", script
          print "Your first variable is:", first
          print "Your second variable is:", second
          print "Your third variable is:", third
          

          这样,您无需向python ex13.py 提供数据即可运行脚本。再说一遍,这不是学习练习要你做的,但我希望它会有所帮助。

          【讨论】:

            【解决方案6】:

            是的,你可以这样做,但它有点棘手,作者在之前的练习中没有提到它。

            argv 实际上是一个列表[](或数据数组),因此您可以在脚本中处理其各个元素。

            这是我的例子:

            from sys import argv
            script, first, second, third = argv # one way to unpack the arguments
            
            script_new = argv[0] # another way
            first_new = argv[1]
            second_new = argv[2]
            third_new = argv[3]
            
            print "original unpacking: ", script, first, second, third
            print "argv[] unpacking: ",script_new, first_new, second_new, third_new
            
            argv[0] = raw_input("argument 0? ")
            argv[1] = raw_input("argument 1? ")
            argv[2] = raw_input("argument 2? ")
            argv[3] = raw_input("argument 3? ")
            
            print argv[0], argv[1], argv[2], argv[3]
            

            【讨论】:

              【解决方案7】:

              我现在正在学习这个,我想他只是想让你多思考和尝试。 这是我的代码:

              from sys import argv
              
              script, slave = argv
              print "Superme master, slave %s is waiting for your order." % slave
              
              slave_says = "Humble %s wants know your supreme name, master:\n" % slave
              name = raw_input(slave_says)
              
              want = raw_input("What do you want, my superme master?\n")
              if want == "Make you freedom.":
                  print "When you make me freedom. you are also make yourself freedom."
              else:
                  print "Yes, my superme master."
              

              【讨论】:

                【解决方案8】:

                作者的想法应该是这样的 如果你在 ipython notebook 中

                % run ex13.py 1st 2nd 3rd
                

                如果你在命令行中

                 python ex13.py 1st 2nd 3rd
                

                【讨论】:

                  猜你喜欢
                  • 2018-08-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-20
                  • 1970-01-01
                  • 2021-01-02
                  相关资源
                  最近更新 更多