反正有没有使python的错误消息停止破坏流程

时间:2018-07-04 04:16:57

标签: python python-3.x

当我执行以下代码时,是否仍要保持python编译器运行代码而不会弹出错误消息?

由于我不知道如何区分整数和字符串,
int(result)执行并且result包含字母时,它会弹出一条错误消息,使程序停止运行。

这附近还有吗?

这是我的代码:

result = input('Type in your number,type y when finished.\n')
int(result)
if isinstance(result,str):
    print('finished')

3 个答案:

答案 0 :(得分:4)

让我们看看您的代码:

int(result)

如果无法将result转换为int,则所有操作都会引发异常。它不会更改result。为什么不?因为在python字符串(和int)中无法更改对象,所以它们是不可变的。所以:

if isinstance(result,str):
    print('finished')

此测试没有意义,因为result始终会是str,因为您尚未更改它-这就是input()返回的类型。

处理错误消息的方法是修复或处理错误消息。有两种通用方法,“飞跃前先看一下”和“异常处理”。在“跨越式浏览”中,您将检查是否可以使用result之类的字符串测试将int转换为str.isdigit()。在python中,通常的方法是使用异常处理,例如:

result = input('Type in your number,type y when finished.\n')

try:
    # convert result to an int - not sure if this is what you want
    result = int(result)
except ValueError:
    print("result is not an int")

if isinstance(result, int):
    print("result is an int")

您可以看到我专门针对ValueError进行了测试。如果您没有这个except,那么它将捕获任何错误,这可能掩盖其他问题。

答案 1 :(得分:0)

实际上,使用Python和许多其他语言,您可以区分类型。

执行int(result)时,内置的int假定参数值可以转换为整数。如果不是,则说该字符串为abc123,它将无法将该字符串转换为整数,并引发异常。

解决此问题的一种简便方法是,在评估isdigit()之前先检查众多内置int(result)中的一个。

# We assume result is always a string, and therefore always has the method `.isdigit`
if result.isdigit():
    int(result)
else:
    # Choose what happens if it is not of the correct type. Remove this statement if nothing.
    pass

请注意,.isdigit()仅适用于整数,10.4将被视为不是整数。但是10将会。

我建议在tryexcept子句中使用这种方法,但这也是有效的解决方案。

答案 2 :(得分:-2)

您可以将可能引发错误的所有内容放在try块中,并使用except块保持程序的正常运行。

我想,在您的代码中应该是isinstance(result,int)而不是isinstance(result,str)

就您而言,

result = input('Type in your number,type y when finished.\n')
try:
    result = int(result)
except:
    pass
if isinstance(result,int):
    print('finished')