我正在通过python教程进行操作,并进入了一个部分,介绍了错误(熟悉错误,在出现问题时不惊慌,等等)。在深入研究了一些错误之后,我看到了“引发错误”和“引发异常”这两个短语。
这是特定功能吗?如果是这样,“引发错误”有什么好处?可视化时,似乎在运行时将执行代码时产生的错误提升到了其他代码之上……有人可以帮我把这些拼凑起来吗?
谢谢!
答案 0 :(得分:4)
引发错误是程序员用一种非常特定的方式说“出了点问题”的方式。打个比方,当足球比赛中的一面旗帜被抛出时,这意味着已经判罚。比赛结束后,裁判员将准确说出处罚(扣押,传球干扰等)以及有罪的一方。
在编程中,惩罚等同于引发错误,惩罚类型是错误类型,而有罪行为的依据是程序员提供的诊断信息(在编程语言之间存在很大差异)。
答案 1 :(得分:0)
您可以将其视为:您希望在看到火灾(错误情况)后立即发出警报(异常)。
答案 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