有一个代码:
try:
def f():
print('hi')
print('bye) # здесь намеренно пропущен закрывающий апостроф
except:
pass
f()
实验的目的是找出当函数f的逐行定义(def)在运行时失败时调用函数时会发生什么。假设定义 (def) 作为语句失败,因此f不会在模块的全局范围内创建函数对象和对它的引用。因此,假设调用f()将导致引发 NameError。
事实上,事实证明在启动时抛出了一个 SyntaxError,并且没有打印 'hi' 行。我认为要么是blocktry没有捕捉到异常,要么是整个模块的bit-code无法创建,因此原则上没有启动,操作员def甚至都没有开始工作(实际上,就像随后的调用一样运算符f())。
问题:请帮我弄清楚为什么电话f()打不通。也许我上面的一个假设是正确的,在这种情况下,我希望看到文档的链接详细解释正在发生的事情。