Types 在python 2.7中使用try/except处理异常

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行,在

我正在试验异常处理/错误捕获,我想知道为什么下面的代码不起作用。我正在使用python 2.7。我理解
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我编辑了答案,希望它能有所帮助。请随便问。