【问题标题】:Beginner getting ValueError初学者得到 ValueError
【发布时间】:2019-01-06 07:44:28
【问题描述】:

我是 python 的初学者编码器,试图制作一个“骰子滚轮”,您可以在其中选择骰子的大小,它会在我的代码的第 20 行返回此错误

import sys
import random
import getopt


def main(argv):
    dsize = ''
    try:
        opts, args = getopt.getopt(argv, "hi:o:", ["dsize="])
        except getopt.GetoptError:
        print("Roll.py -d <dsize>")
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print('Roll.py -d <dsize>')
            sys.exit()
            # elif opt in ("-d", "--dsize"):
            #  dsize = arg
    print('Die size is ', dsize)
    print('roll is: '(random.randrange(1, dsize)))


if __name__ == "__main__":
    main(sys.argv[1:])

如果我取消注释“elif opt in”,并且“dsize”我会得到这个

 File "h:\Projects\Roll.py", line 17
   elif opt in ("-d", "--dsize"):
      ^
SyntaxError: invalid syntax

【问题讨论】:

  • 错误到底是什么意思?
  • 您发布的代码与您的错误不匹配 - elif 在您的代码中已被注释掉,但在错误中它现在已执行?另外,仔细检查缩进匹配(例如:except 应该少一级)

标签: python string random getopt valueerror


【解决方案1】:

错误可能在这一行:

print('roll is: '(random.randrange(1, dsize)))

您正在尝试连接一个字符串和一个整数。有两种选择:

print('roll is: ', random.randrange(1, dsize))

或者

print('roll is: ' + str(random.randrange(1, dsize)))

【讨论】:

    【解决方案2】:

    或者改变:

    print('roll is: '(random.randrange(1, dsize)))
    

    收件人:

    print('roll is: {}'.format(random.randrange(1, dsize)))
    

    或者:

    print('roll is: %s'%random.randrange(1, dsize))
    

    或新的 f-strings(仅适用于 python 版本> 3.6):

    print(f'roll is: {random.randrange(1, dsize)}')
    

    完整代码:

    import sys
    import random
    import getopt
    
    
    def main(argv):
        dsize = ''
        try:
            opts, args = getopt.getopt(argv, "hi:o:", ["dsize="])
        except getopt.GetoptError:
            print("Roll.py -d <dsize>")
            sys.exit(2)
        for opt, arg in opts:
            if opt == '-h':
                print('Roll.py -d <dsize>')
                sys.exit()
                # elif opt in ("-d", "--dsize"):
                #  dsize = arg
        print('Die size is ', dsize)
        print('roll is: {}'.format(random.randrange(1, dsize))) # here i just use the first option
    
    
    if __name__ == "__main__":
        main(sys.argv[1:])
    

    【讨论】:

      【解决方案3】:

      语法错误似乎是由elif 行的缩进级别引起的。条件语句的格式应该是这样的:

      if opt == '-h':
          print('Roll.py -d <dsize>')
          sys.exit()
      elif opt in ("-d", "--dsize"):
          dsize = arg
      

      这是一个链接,其中包含一些 Python 中的条件语句示例:Flow Control in Python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 2022-01-17
        • 2012-12-20
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多