关于python:当程序员说“引发错误”时,他们的意思是什么(例如,为什么这样做)?

What do programmers mean when they say “raise an error” (example, why do this)?

我正在通过一个Python教程,来到了一个介绍错误的部分(熟悉错误,不要在事情发生时惊慌失措,等等)。在深入研究了一些错误之后,我看到了短语"引发错误"和"引发异常"。

这是一个特定的功能吗?如果是这样,"提出错误"有什么好处?在可视化这一点时,似乎在运行时执行代码时产生的错误被提升到其他代码之上…有人能帮我把这个拼凑起来吗?

事先谢谢!


引发错误是程序员以非常具体的方式说"出了问题"的一种方式。打个比方,当足球比赛中的旗子被掷出去时,就意味着已经被罚了。比赛结束后,裁判员将准确地说出判罚内容(持球、传球、干扰等)以及谁是有罪的一方。

在编程中,惩罚相当于错误抛出,惩罚类型是错误类型,有罪的一方是基于程序员提供的诊断(编程语言之间存在很大差异)。


当程序员提到引发一个错误时,它意味着捕获一个意外的行为,什么事情出错了。作为Python中的一个简单示例:

1
2
3
4
5
int('a')
>>
----> 1 int('a')

ValueError: invalid literal for int() with base 10: 'a'

这是有意义的,因为直观地说,除非在某个地方明确定义,否则您不会期望任何程序将像a这样的字符串值强制转换为整数。这是有好处的,如果错误从未被提出,一个意外的行为可能会发生,打破程序流,而没有任何人知道。

一个IRL的例子是你的车,如果你的汽油量低,你会通过仪表板显示屏上的指示器得到通知,这就像一个通知的形式,让你知道你的汽油量低,这让你可以做出一个明智的决定。同样地,当你编程时,会出现好的错误,告诉你某些东西没有相应地工作,并允许你就如何管理或减轻它做出一个明智的决定。

举个例子:

1
2
3
4
5
6
7
8
def multiply(a, b):
    try:
        return int(a) + int(b)
    except ValueError as e:
        print('{}, one or both inputs cannot be converted'.format(e))

multiply('1', 'a')
>> invalid literal for int() with base 10: 'a', one or both inputs cannot be converted

因为有一个EDOCX1[1]被提升了,所以我可以抓住它并通知用户其中一个输入失败了。如果什么也没提,那就好比驾驶你的车不知道汽油什么时候用完,导致你困惑。

这些错误是如何产生的?如果我有一个函数来检查一个值是否在10的范围内,我可以这样做:

1
2
3
4
5
def in_range_10(n):
    for i in range(1,11):
        if i == n:
            return i
    raise IndexError(n)

从1到10的每个值都将返回值本身,因为它在范围内,但如果该值超过10,则raise IndexError和该值本身会引发错误。

1
2
3
4
5
6
7
in_range_10(11)
>> ...
      3         if i == n:
      4             return i
----> 5     raise IndexError(n)

IndexError: 11


您可以将其视为:您希望在看到火灾(错误情况)时立即发出警报(异常)。

参考:https://docs.python.org/2.0/ref/raise.html网站

也指:在python中手动引发(引发)异常