使用“无”时尝试/取消错误

时间:2014-07-08 09:34:27

标签: python try-catch except

我有一些代码没有按预期运行。 我已将其浓缩到这里的问题:

item = None

try:
    if item != None:
        print('pass')
except TypeError, e:
    print('fail')

如果item不是'None'类型,则打印pass。我想提出一个例外 如果该项目为“无”,但是当我将项目设置为“无”时,则无法打印出来。

我可以使用if语句轻松完成此操作,但我很想知道为什么这不能用作try / except。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

TypeError区块中没有任何内容可以引发try,只会检查item !=None是否item !=NoneTrueFalseitem = 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)

如果您真的想在itemNone时提出异常,那么最简单的方法是

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)