Types 在python 2.7中使用try/except处理异常
我正在试验异常处理/错误捕获,我想知道为什么下面的代码不起作用。我正在使用python 2.7。我理解Types 在python 2.7中使用try/except处理异常,types,input,error-handling,python-2.7,try-except,Types,Input,Error Handling,Python 2.7,Try Except,我正在试验异常处理/错误捕获,我想知道为什么下面的代码不起作用。我正在使用python 2.7。我理解input()和raw\u input()之间的区别,并理解在Python 3.0中raw\u input()已重命名为input()。如果我输入一个整数,那么代码将一直循环,直到我输入一个字符串。输入字符串时,我收到以下错误消息。有没有办法解决这个问题,或者这只是python的一个怪癖 文件“”,第30行,在 enterAge=input('以整数形式输入您的年龄:') 文件“”,第1行,在
input()
和raw\u input()
之间的区别,并理解在Python 3.0中raw\u input()
已重命名为input()
。如果我输入一个整数,那么代码将一直循环,直到我输入一个字符串。输入字符串时,我收到以下错误消息。有没有办法解决这个问题,或者这只是python的一个怪癖
文件“”,第30行,在
enterAge=input('以整数形式输入您的年龄:')
文件“”,第1行,在
NameError:未定义名称“”
在Python2.7中,我认为代码应该仍然可以工作
从类型导入IntType
年龄=0
尽管如此:
enterAge=input('以整数形式输入您的年龄:')
尝试:
如果类型(enterAge)为IntType:
num=输入
年龄=年龄+人数
打印str(年龄)+“是旧的!”
除类型错误外:
打印“您没有输入整数”
打破
除了之外,尝试-背后的想法是你没有事先检查所有必要的条件。在您的情况下,您不需要检查内部的类型try
。由于if
语句,异常不会在应该时引发
另外,在Python2上一定要使用raw\u input()
,并记住它总是返回str
。不同之处在于int(enterAge)
的结果:
[1]中的:int('4')
Out[1]:4
[2]中的int('4f')
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
/主/列夫/英寸()
---->1整数('4f')
ValueError:基数为10的int()的文本无效:“4f”
这就是您需要在try
块中尝试的内容,并捕获ValueError
编辑:显然我需要澄清一下答案,所以我将展示我认为代码应该是什么样子:
age=0
尽管如此:
enterAge=raw_input('以整数形式输入您的年龄:')
尝试:
年龄+=整数(enterAge)
印刷时代“是老的!”
除值错误外:
打印“您没有输入整数”
打破
“由于if语句,异常不会在应该的时候出现。”我不同意以下代码,在橙汁上,异常会出现在冰箱={'egons':8,'cheese':12,'butter':4,'milk':17}
尝试:
if冰箱['milk']>0:
打印“喝一些牛奶”
除了KeyError作为错误:
打印“没有%s”%error
尝试:
如果冰箱['橙汁']>0:
打印“喝一些橙汁”
除了KeyError作为错误:
打印“没有%s”%error
为什么我不能让换行符工作?@MichaelSwartz在这种情况下,在如果
:冰箱['orange juice']内评估条件时会导致异常>0
本身会导致异常,因此这是正确使用try
。但是在问题中,可能的问题是错误的类型,因此try
可以解释它,但是if
检查相同的东西<代码>类型(enterAge)是IntType无法生成异常,这就是区别。是的,评论中不能有换行符。有时候这很令人沮丧。不过,您可以根据答案和评论编辑您的问题。因此,我的代码是错误的,因为类似(“x”*100)的内容是(“x”*100)
是错误的(“x”*100)==(“x”*100)
是真的
因为是
测试身份和不平等吗?不确定在上下文中使用是
(正如一个简单的测试所示,它可能会起作用),但我的观点是,你的代码错了,你把一段异常安全的代码放在try
块中。您通过使用if
使其安全。您应该在问题中显示的代码中使用if
或try
。正如我前面提到的,您犯的另一个错误是,raw_input
返回的用户输入将始终是str
,除非您显式转换它,所以您需要对此进行解释。@MichaelSwartz我编辑了答案,希望它能有所帮助。请随便问。