程序员说“引发错误”(例如,为什么这样做)是什么意思?

时间:2018-12-03 19:03:11

标签: python error-handling

我正在通过python教程进行操作,并进入了一个部分,介绍了错误(熟悉错误,在出现问题时不惊慌,等等)。在深入研究了一些错误之后,我看到了“引发错误”和“引发异常”这两个短语。

这是特定功能吗?如果是这样,“引发错误”有什么好处?可视化时,似乎在运行时将执行代码时产生的错误提升到了其他代码之上……有人可以帮我把这些拼凑起来吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

引发错误是程序员用一种非常特定的方式说“出了点问题”的方式。打个比方,当足球比赛中的一面旗帜被抛出时,这意味着已经判罚。比赛结束后,裁判员将准确说出处罚(扣押,传球干扰等)以及有罪的一方。

在编程中,惩罚等同于引发错误,惩罚类型是错误类型,而有罪行为的依据是程序员提供的诊断信息(在编程语言之间存在很大差异)。

答案 1 :(得分:0)

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

引用:
https://docs.python.org/2.0/ref/raise.html

另请参阅:
Manually raising (throwing) an exception in Python

答案 2 :(得分:0)

当程序员提到引发错误时,这意味着捕捉到意外行为是什么地方出了问题。作为Python中的一个简单示例:

int('a')
>>
----> 1 int('a')

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

这是有道理的,直觉上来说,除非明确在某处定义,否则您不会期望任何程序将a之类的字符串值转换为整数。而且这样做有好处,如果从未发生错误,则可能会发生意外行为,从而在没有人知道的情况下中断程序流程。

例如,一个IRL示例就是您的汽车,如果您的汽油不足,则会通过仪表盘显示屏上的指示器通知您,就像发出通知的形式一样,让您知道汽油不足,让您做出明智的决定。同样,在进行编程时,会出现很多错误,以通知您某些操作不正确,从而使您可以明智地决定如何管理或缓解它。

例如:

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

由于出现了ValueError,因此我能够抓住它并通知用户输入之一失败。如果什么都没有提出,那将类似于开车不知道加油何时结束会导致您感到困惑。

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

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

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

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

IndexError: 11