Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加薪和不加薪有什么区别?_Python - Fatal编程技术网

Python 加薪和不加薪有什么区别?

Python 加薪和不加薪有什么区别?,python,Python,当我们有except来处理异常时,引发异常有什么意义?是否因为引发异常允许您创建自己定义的异常 except: raise ZeroDivisionError vs 在try-except语句中使用except,这意味着代码中存在导致引发此异常的错误。Raise用于发出要指出的异常的信号。例如: for x in range(5): if x < 3: raise Exception('x is less than 3') else: print('x is

当我们有except来处理异常时,引发异常有什么意义?是否因为引发异常允许您创建自己定义的异常

except:
  raise ZeroDivisionError
vs


在try-except语句中使用except,这意味着代码中存在导致引发此异常的错误。Raise用于发出要指出的异常的信号。例如:

for x in range(5):
  if x < 3:
    raise Exception('x is less than 3')
  else:
    print('x is 3 or higher')
范围(5)内x的
:
如果x<3:
引发异常('x小于3')
其他:
打印('x等于或大于3')

换句话说,即使您没有发出自己的异常信号,您的代码也不会被破坏/仍将运行,而如果您要从代码中删除try-except语句,则会由于某些错误(ValueError、AssertionError等)而引发异常。您不能像在发布的代码的第一部分中那样引发系统异常,只有第二部分可以正确处理python本身发出的错误语句。

如果您将异常视为抛接球,可能会有所帮助。一个人投球,另一个人接球。只是有些人只想抓棒球,而另一些人只想抓篮球,如果有人扔高尔夫球,也许没人会去抓

在这个类比中,请看以下三个语法片段:

  • raisesomeexception:
    抛出一个异常(一种特定类型的球,比如只投掷网球)
  • except:
    捕获所有异常(无论类型如何)。这相当于一个人接住所有类型的球,不管是什么。如果你能扔一个台球给他们,他们会接住的
  • 除了一些异常:
    另一方面,只捕捉特定类型的异常(比如只捕捉棒球而忽略其他任何东西的人)
然后,执行以下代码

try:
    # ...
except:
    raise ZeroDivisionError
两件事是分开的。首先,它捕获所有异常。当它捕获到一个异常时,它会引发一个新的异常

就好像有人站在运动场上,接住了篮球、棒球、网球、台球,你扔给它的任何东西,但每次他们接住一个球,他们都会毫无疑问地向裁判扔一个高尔夫球。没有别的,只有高尔夫球

本例中的情况并非如此:

try:
    # ...
except ZeroDevisionError:
    # ...
那是一个只会打高尔夫球的人。他们没有扔任何东西,他们只是接球,只有高尔夫球。篮球、棒球和网球被忽略。这和抓住所有东西不一样,也没有投掷

最后:

raise SomeException
可以在任何Python代码中使用。如果他们觉得有必要,代码可以扔球。你不需要同时接球

异常用于中断正常流。例如,只能使用
int()
函数返回整数值。当它无法返回值时,因为出现了错误,它将引发异常。这样你就知道它不能返回一个正确的整数,因为不知怎么的事情出了差错
int(“Hello world!”)
无法返回整数值(该值是多少?),因此引发了
ValueError
异常。当您编写自己的代码时,也会遇到无法生成正常、有效响应的情况,因此您需要自己使用
raise


而捕获所有异常(除了:)通常不是您想要做的事情。我称之为玩口袋妖怪,但在编写好的Python代码时不应该玩口袋妖怪。因为捕获所有异常意味着您还可以捕获
键盘中断
内存错误
,这是您通常希望让程序结束的事情。您将捕获由编程错误引起的简单错误。通常,您只想捕获特定的异常。

当我们有except来处理异常时,引发异常有什么意义?
您无法处理未引发的异常。
except
是处理其他代码发出信号的异常的方式
raise
是您自己发出异常信号的方式。这就像问打电话和接电话有什么区别一样。在
中,除了你通常处理异常,你通常不会提出其他异常。我猜你从一个源代码示例中得到了上面的代码,对吗?在
except
子句中包含
raise
的代码可能只是为了使更一般的异常更具描述性。因此,它不是处理异常,而是替换异常,以便代码的调用方可以处理它。就像“给予”和“接受”之间的区别一样,你的问题相当于问扔球的意义是什么,而你可以直接接球。你认为这个球是如何被抓住的
raise
抛球,
除了
接球。谢谢,这个类比很有帮助。但对于第一个例子,它捕获所有异常,包括键盘中断和内存错误,对吗?然后它会引发另一个异常,可能与捕获的异常无关。既然您提到使用exception:通常不是您想要做的事情,那么这段代码会有用吗?@pastacompany:引发新异常的一揽子
exception:
确实有专门的用途,通常在命令行工具中。
pydoc
工具使用它来发出导入失败的信号,新异常引发文档失败的原因,然后捕获新异常并将其转换为可读的错误消息。
raise SomeException