【发布时间】:2015-06-19 07:02:13
【问题描述】:
在 Python 中方法有点奇怪,至少与其他语言相比。一个函数,比如在 C++ 中,是这样的:
void foo(int i){
cout << i*2 << "\n";
}
这确保传递给该函数的对象实际上是一个整数。然而,在 Python 中,相同的函数如下所示:
def foo(i):
print i*2
这个函数不需要i 是一个整数,更不用说一个数字了。你甚至可以传入一个字符串。所以我的问题是:编写代码时处理这个问题的一般方法是什么?一般来说,检查类型并在使用不正确时抛出错误消息更好,还是宁愿不检查并假设已通过正确的类型?
【问题讨论】:
-
你读过例如docs.python.org/3/glossary.html#term-duck-typing?也有很多关于 SO 的相关问题:stackoverflow.com/q/11328920/3001761 是一个开始。
-
另外,检查类型并抛出错误是毫无意义的,因为如果类型不兼容,它无论如何都会抛出错误。
-
您似乎从未听说过动态类型语言。 Python 并不是唯一的一个:Javascript 和 Ruby 是您可能会遇到的另外两个,但还有更多。
-
甚至不检查类型 - 只做计算。如果您认为它可能会失败(例如,由于接受用户输入),请
try它并在失败时捕获错误,因为请求宽恕比请求许可更容易。 -
对于建议“输入错误就让它自然失败”的用户,错误的输入可能会产生异常输出而不是崩溃。例如,
foo("42")将打印“4242”而不是引发 TypeError 或其他任何内容。
标签: python