首页 文章

为什么我得到ValueError:对于带有基数为10的int()的无效文字:''

提问于
浏览
0

当我运行这个程序时,我得到错误,ValueError:对于带有基数10的int()的无效文字:'',我觉得它与int和str转换有关,但我真的不太确定,任何帮助表示赞赏:)

CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
12:"December"}

InputError = True
while InputError:
    try:
        BirthDate = str(input("Enter Birth Date in format DDMMYY - "))
    except ValueError:
        print("Error - Numbers in format DDMMYY only")
        InputError = False

DD = BirthDate[0:2] 
MM = BirthDate[3:4]
YY = BirthDate[4:6]

if MM == BirthDate[3:4]:
   print("Your Birth Month is - ", (CalendarDict[int(MM)]))

3 回答

  • 2

    正如其他人所指出的那样,绊倒你的是slice notation . 这是一个似乎做你想要的版本:

    CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
    6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
    12:"December"}
    
    while True:
        try:
            BirthDate = str(input("Enter Birth Date in format DDMMYY - "))
            break
        except ValueError:
            print("Error - Numbers in format DDMMYY only")
    
    DD = BirthDate[0:2] 
    MM = BirthDate[2:4]
    YY = BirthDate[4:]
    
    print("Your Birth Month is - ", (CalendarDict[int(MM)]))
    

    注意开始和结束位置如何匹配 .

  • 1

    我宁愿把它放在评论中,但没有足够的代表,所以这里 .

    首先,Python中的数组切片要求您以 [a:b] 格式给出数字,其中a是您想要获取的第一个字符的索引,b是字符up的索引,但 NOT 包括您想要获取的字符,所以变量MM应该是 BirthDate[2:4] .

    接下来,要检查某些内容是否符合您的"DDMMYY"要求,您应该使用 int(input("Enter your DOB ))因为任何人都可以输入随机文本并使用str()函数将其转换为字符串(因为我相信你是寻找积分输入)

    另外,如其中一条评论中所述,请尝试将 InputError=False 放在 try 部分而不是 except 部分 .

    所以代码看起来像这样:

    CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
    6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
    12:"December"}
    
    InputError = True
    while InputError:
        try:
            BirthDate = int(input("Enter Birth Date in format DDMMYY - ")) # change to int() from str()
            InputError = False # set error to false since the above line got evaluated
        except ValueError:
            print("Error - Numbers in format DDMMYY only")
    
    DD = BirthDate[0:2] 
    MM = BirthDate[2:4]
    YY = BirthDate[4:6]
    
    print("Your Birth Month is - ", (CalendarDict[MM])) # converting into integer is not required since it already is one!
    
  • 0

    您可以使用 datetime 模块非常有效地执行您想要的操作 .

    import datetime
    
    while True:
        try:
            birthDate = datetime.datetime.strptime(input("Enter Birth Date in format DD/MM/YYYY - "), "%d/%m/%Y")
            break
        except ValueError as ve:
            print(ve)
            continue
    
    print("Your Birth Month is - {}".format(birthDate.strftime("%B")))
    

    这导致使用:

    Enter Birth Date in format DD/MM/YYYY - 31/10/2000
    Your Birth Month is - October
    

    datetime 非常强大,特别是提供的 .strptime 用于解析日期, .strftime 用于提供各种输出 . 如果您打算使用输入,输出和日期,我建议您阅读documentation . datetime 可以通过日期轻松扩展到更复杂的任务 .

    如果您使用的是Python2,请将 input 更改为 raw_input .

    我还删除了你的 if 语句 - 它似乎是在检查MM对MM的定义 . 请注意 CalendarDict 是不必要的,因为您可以使用 datetime 的强大功能 . 我已经将 while 循环更改为仅使用控制流语句,而不是变量 .

    一般提示:对于变量使用 camelCasingunderscore_casing ,因为 CapitalCasing 通常是为类保留的 .

相关问题