初学者获取ValueError

时间:2018-07-30 05:31:03

标签: python string random getopt valueerror

我是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

4 个答案:

答案 0 :(得分:0)

错误可能在此行上:

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

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

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

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

答案 1 :(得分:0)

或更改:

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

收件人:

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

或者:

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

或者新的f字符串(仅适用于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:])

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

我用Tkinter做这个:

import tkinter as tk


master=tk.Tk()
root=master

tk.Label(master, text = "How many sides?").grid(row=0)
e1=tk.Entry(root)
e1.grid(row=0, column= 150)

def Get():
  import random
  varY=int(e1.get())
  if varY<= 0:
    print('Impossible')

  else:  
    varX=random.randint(1,varY)
    print(varX)
  tk.Label(master, text=varX).grid(row=2)

button = tk.Button(master, text = "Submit", command = Get)
button.grid(row=100, column=150)

不是最好的,但是对于多卷来说很好。