我有一些代码没有按预期运行。 我已将其浓缩到这里的问题:
item = None
try:
if item != None:
print('pass')
except TypeError, e:
print('fail')
如果item不是'None'类型,则打印pass。我想提出一个例外 如果该项目为“无”,但是当我将项目设置为“无”时,则无法打印出来。
我可以使用if语句轻松完成此操作,但我很想知道为什么这不能用作try / except。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
在TypeError
区块中没有任何内容可以引发try
,只会检查item !=None
是否item !=None
。 True
将False
或item = None
try:
if item != None: # better: if item is not None
print('pass')
else:
raise TypeError
except TypeError:
print('fail')
,但在任何一种情况下都不会引发错误。
您可以执行以下操作:
item = None
if item != None: # better: if item is not None
print('pass')
else:
print('fail')
或者简单地说:
{{1}}
答案 1 :(得分:1)
更多pythonic方式:
item = None
result = 'pass' if item is not None else 'fail'
print result
答案 2 :(得分:1)
如果您真的想在item
为None
时提出异常,那么最简单的方法是
if item is None:
raise TypeError("'None' value provided for item of farkling routine")
正如已经指出的那样,在您的示例中,您不会导致except
子句触发任何异常。但我可能误解了你的问题。
答案 3 :(得分:0)
您的原始代码:
item = None
try:
if item != None:
print('pass')
except TypeError, e:
print('fail')
print('fail')
中的except
不起作用的原因是由于try除了阻止实际上没有出现任何错误。想一想,变量item
在上面被声明,所以它确实存在。然后你正在测试if item != None
,在这种情况下它是None,但是这不会引发异常。
让我们删除item = None
,就像这样。
try:
if item != None:
print('pass')
except TypeError, e:
print('fail')
你会发现你的try except块现在会引发一个异常呼叫你的print('fail')
。这是因为,现在您正在尝试测试if item != None
,但是没有这样的变量item
,因此异常调用。
检查变量是否为None
的简单方法是执行此类操作。
is_none = True if item is None else False
print(is_none)
相当于
if item is None:
is_none = True
else:
is_none = False
print(is_none)