Python『玄学』故障:小括号引发的血案

warning: 这篇文章距离上次修改已过361天,其中的内容可能已经有所变动。

请观察这一段代码,思考一下问题出在哪里:

import foo
app = foo.Application
(
  [1,1,4,5,1,4]
)
app.test('1919810')

如果你暂时还不能看出来的话,不妨继续往下看

这段代码看似没有什么问题,甚至VSCode(装了插件之后)静态检查也是没什么问题的

但是如果你运行起来,你会发现,Python报错了

Traceback (most recent call last):
  File "E:\path\to\main.py", line 8, in <module>
    app.test('1919810')
TypeError: Application.test() missing 1 required positional argument: 'self'

看出来什么问题了吗?

接下来,把代码改成这个样子:

import foo
app = foo.Application(
  [1,1,4,5,1,4]
)
app.test('1919810')

你会发现,程序运行正常,输出也正常

这就是这个玄学故障的原因:调用一个类的方法之前得对其进行实例化,但是第一段代码的写法(小括号放到第二行开头),Python不会将其识别为『你要实例化』,然后后面就没有实例化,然后就报错了

解决办法正如第二段所示,小括号写到末尾就是了

今日水贴完毕,溜了....

none
最后修改于:2023年11月26日 16:29

添加新评论