在Python中处理NameError时遇到问题。相互矛盾的结果

在Python中处理NameError时遇到问题。相互矛盾的结果,python,exception,Python,Exception,通常,当我使用异常处理(如NameError)时,它工作正常。但是在下面的代码中,它没有这样做。为什么? 代码: 类Foo(对象): 定义初始化(自): 打印(“实例已启动”) def isMember(实例): 尝试: 返回isinstance(实例,Foo) 除名称错误外: 打印(“不存在此类成员”) a=Foo() 伊斯梅尔(b) 给出以下输出- Instance initiated. NameError: name 'b' is not defined 正确的输出应为- Instan

通常,当我使用异常处理(如NameError)时,它工作正常。但是在下面的代码中,它没有这样做。为什么?

代码:

类Foo(对象):
定义初始化(自):
打印(“实例已启动”)
def isMember(实例):
尝试:
返回isinstance(实例,Foo)
除名称错误外:
打印(“不存在此类成员”)
a=Foo()
伊斯梅尔(b)
给出以下输出-

Instance initiated.
NameError: name 'b' is not defined
正确的输出应为-

Instance initiated.
No such member exists.

它在到达函数之前被终止。当解释器读取
b
时,会出现异常。 如果在调用函数时使用try-catch,您可以清楚地知道

class Foo(object):

    def __init__(self):
        print("Instance initiated.")

def isMember(instance):
    try:
        return isinstance(instance, Foo)
    except NameError:
        print("No such member exists.")

a = Foo()
try:
    isMember(b)
except NameError:
    print("executed here")


b
在传递给方法之前进行计算,此时会发生NameError,因此不会实际调用您的方法。@ArnabMukherjee您能提供一个例子说明它在
ZeroDivisionError
中的作用吗?