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

时间:2017-08-23 15:32:23

标签: python valueerror

当我运行这个程序时,我得到错误,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 个答案:

答案 0 :(得分:2)

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

首先,Python中的数组切片要求您以[a:b]格式给出数字,其中a是要获取的第一个字符的索引,b是字符的索引,但是包括你想要获得你的角色,所以变量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!  

答案 1 :(得分:1)

您可以使用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用于提供各种输出。如果您打算使用输入,输出和日期,我建议您阅读documentationdatetime可以轻松扩展到更复杂的日期任务。

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

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

同样是一般性提示:使用camelCasingunderscore_casing作为变量,因为CapitalCasing通常是为类保留的。

答案 2 :(得分:0)

正如其他人所指出的那样,绊倒你的是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)]))

注意开始和结束位置是如何匹配的。