当我执行以下代码时,是否仍要保持python编译器运行代码而不会弹出错误消息?
由于我不知道如何区分整数和字符串,
当int(result)
执行并且result
包含字母时,它会弹出一条错误消息,使程序停止运行。
这附近还有吗?
这是我的代码:
result = input('Type in your number,type y when finished.\n')
int(result)
if isinstance(result,str):
print('finished')
答案 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
将会。
我建议在try
和except
子句中使用这种方法,但这也是有效的解决方案。
答案 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')