Python CodeLab 关于异常的问题——尝试,除了 ValueError
Posted
技术标签:
【中文标题】Python CodeLab 关于异常的问题——尝试,除了 ValueError【英文标题】:Python CodeLab Question About Exceptions -- Try, Except ValueError 【发布时间】:2020-08-02 02:44:29 【问题描述】:问题:
“三个变量——x、y 和 z——应该包含数字字符串,适合转换为整数。编写将这些变量转换为整数的代码并打印这三个整数的和。但是,如果任何变量有值不能转换为整数的,打印出字符串“bad value(s) in:”,后跟具有错误值的变量的名称(以空格分隔,按字母升序排列)。
例如,如果 x、y 和 z 的值分别为“3”、“9”和“2”,则将打印数字 14。另一方面,如果值是“abc”、“15”和“boo”,那么输出将是:bad value(s) in: x z。
注意:这个问题来自图灵的Craft CodeLab,它似乎需要特定的标准输入才能得到正确的答案。我包含了 CodeLab 在每次尝试后提供给我的“错误分析”,让您了解它正在寻找的格式。
尝试 #1:
error_output = "Bad values in:"
numeric_output = 0
inputs = input().strip().split(" ")
try:
x = int(inputs[0])
numeric_output += x
except ValueError:
error_output += " x"
try:
y = int(inputs[1])
numeric_output += y
except ValueError:
error_output += " y"
try:
z = int(inputs[2])
numeric_output += z
except ValueError:
error_output += " z"
if error_output != "Bad values in:":
print(error_output)
else:
print(numeric_output)
虽然这段代码在 Idle 和 Pycharm 上运行都没有问题,但它不是 CodeLab 上的正确答案...这是我 第一次尝试的 CodeLab 的“错误分析” :
-
在每个测试用例中:a) stdout 不正确 和 b) 没有打印到标准输出
您几乎肯定应该使用:+
我还没有看到使用以下方法的正确解决方案:" "
我还没有看到使用以下方法的正确解决方案:" x"
我还没有看到正确的解决方案使用:“y”
我还没有看到一个正确的解决方案使用:“z”
我们认为您可能需要考虑使用:==
我们认为您可能需要考虑使用:sum
采用您的方法的解决方案通常不使用:!=
采用您的方法的解决方案通常不使用:。 (句号)
采用您的方法的解决方案通常不使用:1
采用您的方法的解决方案通常不使用:2
采用您的方法的解决方案通常不使用:[ ]
采用您的方法的解决方案通常不使用:输入
采用您的方法的解决方案通常不使用:strip
我们认为您可能要考虑使用:不
我的第二次尝试:
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:")
if not x.isdigit():
print(' x')
if not y.isdigit():
print(' y')
if not z.isdigit():
print(' z')
'错误分析' Attempt #2:
-
在某些测试用例中:stdout 不正确
您几乎肯定应该使用:=
我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
我还没有看到使用以下方法的正确解决方案:'x'
我还没有看到一个正确的解决方案使用:'y'
我还没有看到使用以下方法的正确解决方案:'z'
您几乎可以肯定应该使用:str
我们认为您可能需要考虑使用:,(逗号)
采用您的方法的解决方案通常不使用:ValueError
最后,这是我的第三次尝试(根据 CodeLab,这是最接近准确的):
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print('x',end='')
if not y.isdigit():
print('y',end='')
if not z.isdigit():
print('z',end='')
'错误分析' Attempt #3:
-
在某些测试用例中:stdout 不正确
我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
采用您的方法的解决方案通常不使用:''
采用您的方法的解决方案通常不使用:ValueError
我错过了什么?
【问题讨论】:
请更新您的代码,使其成为minimal reproducible example 【参考方案1】:你为什么不尝试在每个变量之前添加空格,我想这会有所帮助。我也遇到过这类问题。
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print(' x',end='')
if not y.isdigit():
print(' y',end='')
if not z.isdigit():
print(' z',end='')
【讨论】:
【参考方案2】:这也应该可以工作:
try:
print(int(x)+int(y)+int(z))
except ValueError:
print('bad value(s) in:', end=' ')
if not x.isdigit():
print('x', end=' ')
if not y.isdigit():
print('y', end=' ')
if not z.isdigit():
print('z', end=' ')
【讨论】:
【参考方案3】:感谢大家的帮助!我发现答案是:
try:
sum = int(x) + int(y) + int(z)
print(sum)
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print(' x',end='')
if not y.isdigit():
print(' y',end='')
if not z.isdigit():
print(' z',)
【讨论】:
【参考方案4】:sum=0
badvalues=""
try:
sum += int(x)
except ValueError:
badvalues += " x"
try:
sum += int(y)
except ValueError:
badvalues += " y"
try:
sum += int(z)
except ValueError:
badvalues += " z"
if badvalues=="":
print(sum)
else:
print("bad value(s) in:"+badvalues)
【讨论】:
以上是关于Python CodeLab 关于异常的问题——尝试,除了 ValueError的主要内容,如果未能解决你的问题,请参考以下文章
DLPaddle BML Codelab环境使用说明 - 知识点目录