一、问题的提出
写代码的时候,我们有时候会给某些未完成的函数预留一个空位,等以后有时间再写具体内容。通常,大家会用 pass 或者 ... (省略号)来占位。这种方法虽然能让代码暂时不报错,但可能在调试的时候让人忘了这里还有代码没写完,结果引发一些难找的问题。
def mi_funcion():
pass # 以后再补上具体代码
或者
def mi_funcion():
... # 还没写好,留个空
这样写,当你以后运行这段代码时,程序不会给你任何提示或者直接返回N。如果你忘了实现它,也不会报错。等到后来出问题了,你可能还得花时间debug。如下面的图,直接返回None。
二、解决办法
相比之下,可以使用raise 加上NotImplementedError ,显式地抛出错误信息,这样或许就更好。当你调用这个没完成的函数时,程序会直接告诉你:“这里有代码没写完,稍后补上!”
这样不仅容易发现报错问题,还能让你迅速定位到程序哪里出了错。
示例代码:
def mi_funcion():
raise NotImplementedError("代码还没写,稍后补上")
这样当你运行上述程序时,就会得到以下报错信息。
>>> mi_funcion()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NotImplementedError: 代码还没写,稍后补上
这样操作,有如下好处:
- 提示明确:下次调用这个函数时,错误信息会告诉你这个功能还没实现。
- 防止疏忽:防止你或者其他人不小心用到没写完的代码,而不知道它其实还没完成。
- 更容易调试:当你看到错误提示时,可以快速找到问题所在,省去排查的麻烦。
三、学后总结
设置还没有代码的函数,与其用 pass 或者 ... 来占位,不如直接用raise抛出一个 NotImplementedError。
这不仅能让你及时发现还没完成的功能,减少debug的时间,也能避免一些潜在的问题。以后再修改这串代码时,你会感谢自己做了这个选择!
这个小技巧不仅适合自己用,还非常适合团队协作时使用,能让大家更清楚代码状态,减少调试时的困扰。