擅长:python、mysql、java
<p>正如其他人所说,你一般应该避免这样的检查。一个例外是,对象可能是合法的不同类型,并且您希望根据类型有不同的行为。EAFP方法并不总是在这里工作,因为一个对象可能看起来像不止一种类型的duck!</p>
<p>例如,初始化程序可以获取自己类的文件、字符串或实例。然后您可能会得到如下代码:</p>
<pre><code>class A(object):
def __init__(self, f):
if isinstance(f, A):
# Just make a copy.
elif isinstance(f, file):
# initialise from the file
else:
# treat f as a string
</code></pre>
<p>在这里使用EAFP可能会导致各种微妙的问题,因为在抛出异常之前,每个初始化路径都会部分运行。
从本质上说,这种构造模仿函数重载,因此不是很Python,但如果小心使用,它可能会很有用。</p>
<p>顺便说一句,在Python 3中,不能用同样的方法检查文件。你需要像<code>isinstance(f, io.IOBase)</code>这样的东西。</p>