Why am I getting ValueError: invalid literal for int() with base 10: ''
Why am I getting ValueError: invalid literal for int() with base 10: ''
当我 运行 这个程序时,我收到错误,ValueError: invalid literal for int() with base 10: '',我觉得这与 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)]))
我宁愿把它放在评论中,但没有足够的代表,所以就这样吧。
首先,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!
正如其他人所指出的那样,让您感到困惑的是 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)]))
注意开始和结束位置是如何匹配的。
您可以使用 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
循环更改为仅使用控制流语句,而不是变量。
还有一个一般提示:对变量使用 camelCasing
或 underscore_casing
,因为 CapitalCasing
通常保留给 类。
当我 运行 这个程序时,我收到错误,ValueError: invalid literal for int() with base 10: '',我觉得这与 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)]))
我宁愿把它放在评论中,但没有足够的代表,所以就这样吧。
首先,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!
正如其他人所指出的那样,让您感到困惑的是 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)]))
注意开始和结束位置是如何匹配的。
您可以使用 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
循环更改为仅使用控制流语句,而不是变量。
还有一个一般提示:对变量使用 camelCasing
或 underscore_casing
,因为 CapitalCasing
通常保留给 类。