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环境使用说明 - 知识点目录

实施 Codelab Firebase 聊天示例

请教关于python的raise使用的问题

Firebase iOS Codelab Swift 中的错误

text Flutter CodeLab

Codelab for Android Design Support Library