[python3教程]第八章.ERRORS AND EXCEPTIONS

到目前为止,我们对错误和异常讲的并不多,但至少肯定有两种大家见过了:syntax errors和exceptions。

8.1 Syntax Errors

语法错误也可以叫做解析错误,实在是让人非常头疼的问题:

解析程序返回了错误的行数,并且用箭头指出了最早发现错误的位置。当然后面也许还有错误,这个箭头是告诉我们错误至少在箭头前已经发生了,在这个例子中错误发生在print()函数之前,在这之前缺少一个冒号。最先返回的是错误的文件名,这可以方便我们知道是哪个脚本里的错误,要不自己找起来就太痛苦了。

8.2 Exceptions

即使一个声明或者表达式在语法上是正确的,但是在执行的时候可能也会有错误。这个错误就是异常,实在表达式执行的过程中自己调用的,他并不是无条件完全致命的错误,接下来我们很快会学到在 python中处理异常。大部分异常程序都不会处理,总之先看看例子:

错误信息的最后一行会提示发生了些什么,异常有很多种类型,消息中也会显示异常的类型,在例子中我们看到了3中异常: ZeroDivisionErrorNameErrorTypeError。一般来说还是顾名思义都能清楚的明白发生了些啥。上面看到的这些异常类型都是内建的异常,这些内建的异常都会把异常类型打印出来,但是用户自建的可能会有所区别(当然自建的异常也是非常重要的)。省下的部分会提示更多的异常细节和引起异常的原因,错误信息前面的部分使用 trackback(这是一个日志工具很有用的)显示错误异常发生的位置。在标准库的 bltin-exception中有对内建异常的详细介绍。

8.3 Handling Exceptions

我们是可以通过异常的调用解决实际问题的,下面我们看个例子,检测用户的输入,直到一个合法数据被传入:

这个水印的效果真心不太好,以后就不用水印了,try协议是这么工作的:
首先执行try的语句,就是 tryexcept之间这部分。
如果没有异常的话, except部分就会被跳过,try的语句会被执行完。
如果在执行 try语句部分时发生了异常,那么try语句省下的部分都不会被执行,而是直接跳转到 except部分。如果发生的异常能和关键字匹配,那么就执行对应的操 作。
如果没能在 except中找到对应的异常关键字,他会到上一级中寻找,如果还是找不到的话执行就会终止并提示 unhandled exception
一个 try协议可以拥有多个异常处理语句,但是最多只会执行一个,因为不能同时出现两个异常。但是一个 except语句可以用元组的包含多个异常,就是说自己个异常的处理方式是一样的:
... except (RuntimeError, TypeError, NameError):
... pass

在选择异常处理时,遵循的是基类优先,就是说子类可以对应上基类的异常处理。这么说好乱啊,我们还是直接看例子吧:

在这个例子中,会打出 B,B,B因为 CD都会直接对应上基类B的异常处理,想要打印出 B,C,D的话可以将 except反序的写,就是先写 D的处理,再写 C的处理,最后写 B的处理。最后一个 except语句其实是可以省略异常的关键字的,这是他就成了通配符,但是这种用法需要十二分的小心,因为她可能会把真正的错误隐藏掉。当然他也是可以打印错误信息的,还可以重新引起其他异常:

try...except协议还有另外一个 else选项,他必须写在 except之后,如果 try没有引起异常那么就执行 else内代码:

这样执行代码的好处是可以避免发生了其他的异常影响语句的执行。
当一个异常发生的时候,它可能还有几个伴随这个异常的变量。这些变量的类型和表现都是取决于异常的类型的, except可以将变量指定给异常实例。这些变量会被保存在异常实例的 instance. args中。异常实例定义了 __str__()所以这些变量都可以很方便的被打印出来,我们可以在 try语句中直接将变量指定给异常实例:

异常处理并不仅仅局限于 try语句的代码中,在其中调用其他部分如果引起对应的异常也会转到 except中:


8.4 Raising Exception

raise协议允许我们强行指定一个异常发生来看看它什么效果:

注意 raise只能引起它指定的那一个异常,不能同时引起多个。且引起的要么是异常实例,要么是异常类。如果传入一个类,他会直接调用构造器构造一个没有任何参数的实例,如果你想要引起一个异常但是还不打算解决它,那么可以在 except中再次 raise这个异常:

8.5 User-defined Exceptions

我们可以通过创建新的异常类来定义我们想要的异常,但是我们定义的异常类也应该继承自 exception基类。异常类其实可以做到其他类能做到的任何事,他在本质上与其他类并没有什么区别,但通常我们不并不会让他太过于复杂。一般我们只提供几个属性保证发生的错误能被处理即可:

我们先定义一个基类,然后用子类解决具体的问题。在命名规则上我们一般保证异常类都是以Error来结尾的。许多标准模块都会定义异常类来解决自己模块定义方法中出现的错误,我们会在class章节中看到更多的内容。

8.6 Defining Clean-up Actions

try协议还有另一个可选项叫做 finally,顾名思义他是在最后执行的,而且也是必须执行的~无论是否引起的异常:

在结束try协议之前 finally部分是一定会被执行的,无论是否发生了异常。如果在try语句中发生了异常,但是 except中没有对应的关键字,那么这个异常将会被暂时忽略,在执行完 finally的代码后在提起这个异常,我们看一个稍微复杂点的例子:

可以清楚的看到, finally部分的代码肯定是会执行的。 TypeError的异常不在 except中,所以他是在 finally代码执行完了之后才被提起的。在实际编码工作中, finally部分主要是用来释放外部资源的,无论它是否成功的被执行了。

8.7 Predefined Clean-up Actions

  有些对象自身设置了清除动作,在资源不再被需要时自动清除,无论对他的使用是否成功。先看一个我们意见就学习过得打印文件的例子:

这段代码在执行之后, workfile并没用被关闭,他会一直保存在内存器(记忆体)中,在一个简单的脚本中这没有什么问题,但是在一个大型的应用中这可能就会变得严重。使用 with结构可以很好的解决这个问题:

这段代码执行结束后,即使发生了异常,文件f也一定是被关闭的。包含有这样功能的对象都会在他们的说明中明确的指出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 报告的一种错误类型。它通常表示传递给 TensorFlow 函数或操作的某些参数不正确或无效。可能的原因包括参数的形状不匹配、数据类型不一致、空数据等。要解决这个错误,您需要检查输入参数是否符合 TensorFlow 函数或操作的要求,并进行必要的更正。您还可以查看 TensorFlow 的文档或社区支持以获取更多信息和帮助。tensorflow.python.framework.errors_impl.invalidargumenterror是TensorFlow的一个错误类型,它表示给定的输入参数无效或不符合预期。这个错误通常出现在TensorFlow的计算图构建或运行阶段,可能是因为输入的维度不匹配、张量的形状不正确或者数据类型不一致等问题。如果你遇到了这个错误,可以检查你的输入数据是否符合TensorFlow所要求的格式和要求,或者查看TensorFlow的文档和API参考以找出解决方案。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型,通常表示给定的参数不符合所需的规范或约束。这可能是由于数据类型不匹配、张量维度不匹配、参数范围不正确等原因引起的。如果您遇到了这个错误,您可以检查一下您的输入数据是否正确,或者尝试调整您的参数范围,以确保它们符合所需的规范。另外,您可以查看 TensorFlow 的文档和社区论坛以获得更多的帮助和支持。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架抛出的一个错误类型,通常表示在调用 TensorFlow 操作时,输入参数存在一些无效的值或格式不正确,导致无法继续执行该操作。 要解决这个问题,需要检查代码中对 TensorFlow 操作的调用,确保输入参数的值和格式正确无误,例如确保张量的形状和数据类型与操作的要求一致。还可以使用 TensorFlow 提供的调试工具,例如 tf.debugging.assert_* 函数,来检查输入数据是否符合预期,以帮助快速定位错误。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是一个 TensorFlow 框架的错误类型,通常表示代码中传递给 TensorFlow 函数的参数不符合函数要求。可能的原因包括参数类型不正确、形状不匹配、范围不合法等等。需要仔细检查代码并调整参数,以解决这个错误。`tensorflow.python.framework.errors_impl.invalidargumenterror` 是 TensorFlow 中的一种错误类型,表示函数参数无效。可能是因为参数类型不正确、维度不匹配、形状不合法等问题导致的。通常需要检查代码中的参数传递是否正确,以及输入数据的形状和维度是否与模型要求相符。在出现此错误时,可以查看错误信息中的具体提示,以确定导致错误的原因。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型,表示在执行 TensorFlow 操作时传递了无效的参数。这通常会导致操作无法完成并引发异常。如果您遇到这个错误,请检查您的代码和参数,确保它们都是正确的。可能需要对输入数据进行一些预处理,以确保它们符合操作的要求。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 的一个错误类型,表示传递给 TensorFlow 的参数无效。可能是因为参数的类型、形状或值不符合 TensorFlow 函数的要求。要解决这个错误,可以检查传递给函数的参数是否正确,并确保它们符合函数的要求。另外,可以查看错误消息提供的详细信息,以更好地理解错误的原因。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 报告的一个错误,表示在调用 TensorFlow 函数时,传递给函数的参数有误或不合法。通常这种错误的信息会包含更详细的描述,例如具体是哪个参数有问题、其期望值是什么等等,需要根据具体的错误信息来进行排查和解决。 很抱歉,我无法回答这个问题,因为我不太熟悉TensorFlow Python框架。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型,通常表示传递给 TensorFlow API 的参数无效或不正确。 例如,如果您使用 tf.concat() 函数来连接两个张量,但是这两个张量的维度不兼容,那么就会出现 "tensorflow.python.framework.errors_impl.invalidargumenterror" 错误。 为了解决这个问题,您需要检查您传递给 TensorFlow API 的参数是否正确。可能需要检查张量的维度、形状、数据类型等信息,以确保它们与您的操作相兼容。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 报告的一种错误类型,意思是 TensorFlow 函数的一个或多个输入参数无效。 这种错误通常表示您传递给 TensorFlow 函数的数据类型、形状或值与函数所需的不匹配。这可能是由于代码错误、数据预处理问题或其他原因导致的。 要解决这个问题,您需要检查您的代码和数据,确保输入参数的类型、形状和值符合函数的要求。您还可以查看 TensorFlow 的文档和示例代码,以了解如何正确地使用函数和处理数据。如果问题仍然存在,您可以在 TensorFlow 的社区中寻求帮助。"tensorflow.python.framework.errors_impl.invalidargumenterror"是TensorFlow的一个错误类型,表示某些参数不合法。可能是因为参数的形状、数据类型或范围不正确,导致无法继续执行。如果你遇到了这个错误,可以检查一下你的代码中是否有不合法的参数,并尝试修复它们。tensorflow.python.framework.errors_impl.invalidargumenterror是TensorFlow的一个错误类型,通常意味着您提供给TensorFlow的输入数据不符合要求或格式错误。这可能是由于数据类型不匹配、输入数据维度不正确或其他类似问题导致的。为了解决这个问题,您需要检查输入数据是否符合TensorFlow的要求,例如确保数据类型正确,维度匹配等。如果您不确定问题的具体原因,可以查看TensorFlow的文档或向社区寻求帮助。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型,通常表示函数的输入参数无效。可能的原因包括参数的维度不匹配,传递的参数类型不正确,或者参数的值超出了可接受的范围。要解决这个错误,需要检查代码中与该错误相关的函数和参数,并确保它们的维度、类型和值是正确的。 我不明白你的意思。你能再解释一下吗?`tensorflow.python.framework.errors_impl.invalidargumenterror` 是一个 TensorFlow 中的错误类型,表示输入参数不合法,可能是因为参数的形状、数据类型、取值范围等不符合要求。通常需要检查代码中涉及的数据输入和处理部分,以确定具体的错误原因。可以查看错误信息中提供的详细信息来帮助诊断问题。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 的一个错误类型,表示传入的参数不合法。通常会给出具体的错误信息,例如参数的维度不匹配、形状不正确等等。解决此错误需要仔细检查代码中传入的参数是否符合要求,并进行相应的调整和修改。`tensorflow.python.framework.errors_impl.invalidargumenterror` 是 TensorFlow 框架中的一个错误类,表示函数或操作的一个或多个参数无效或不合法。 可能的原因包括: - 参数类型不匹配或不兼容 - 参数值不在允许的范围内 - 参数缺失或多余 - 参数格式错误 要解决这个错误,需要检查代码中相关函数或操作的参数,并确保它们的类型、值、数量和格式符合要求。如果需要,可以参考 TensorFlow 的文档和示例进行调试和修改。 无效的参数错误:Tensorflow.Python.Framework.Errors_Impl.InvalidArgumentError`tensorflow.python.framework.errors_impl.invalidargumenterror` 是 TensorFlow 框架中的一个错误类型,表示输入的参数不合法。这个错误通常是由于输入的张量形状、数据类型、取值范围等方面与所要求的不符合导致的。解决这个错误需要仔细检查输入张量的相关参数,确保它们符合所要求的规范。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 报告的一个错误类型。这个错误通常表示输入参数无效,不符合操作的要求,或者参数之间的不一致性导致了操作的失败。这种错误通常需要仔细检查代码和数据输入,以确定哪些参数导致了错误,并做出相应的修复。如果您需要更具体的帮助,请提供更多上下文信息,以便我们能够更好地帮助您解决问题。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型。它通常表示在运行 TensorFlow 代码时,传递给某个函数或操作的一个或多个参数无效。这可能是由于参数类型错误、参数值不在允许的范围内、形状不匹配等原因引起的。要解决此错误,您应该检查代码并确保您提供给 TensorFlow 的所有参数都是有效的。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 中的一个错误类型,通常表示输入参数不符合所需的格式或规范。这个错误可能会发生在训练模型时,也可能在模型运行时出现。 可能的原因包括输入数据的形状与模型期望的不匹配、数据类型不一致、输入数据中包含非法值等等。如果出现这个错误,需要仔细检查输入数据并确保其符合模型的要求。此外,也可以查看错误消息中的详细信息,以便更好地了解错误的原因和解决方法。 很抱歉,我不太明白您的问题。请您提出更加具体的问题,我会尽量回答。 抱歉,我无法理解你的问题。请尝试重新提问,或者提供更多的上下文信息。"tensorflow.python.framework.errors_impl.invalidargumenterror" 是 TensorFlow 框架中的一个错误类型,通常表示代码中的某些参数无效或不合法。可能的原因包括输入形状与期望不符、数据类型不匹配、不支持的操作等等。如果出现这个错误,建议检查一下代码中的输入参数是否符合要求,并确认代码中的各个操作都被正确地调用和连接。如果问题仍然存在,可以进一步查看错误信息中的具体提示,以确定出错的原因和位置,进而进行修复。很抱歉,我不确定您的问题的具体内容。 但是,这个错误通常与TensorFlow框架相关,并指示某些参数或输入不正确或无效。 要解决此错误,您可以考虑检查您的TensorFlow代码或模型的输入和参数,并确保它们符合TensorFlow的要求。 您还可以查看TensorFlow的文档和社区支持以获取更多信息和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值