Python中的用户定义异常与NZEC错误

共 2725字,需浏览 6分钟

 ·

2020-10-05 02:19

前提条件- 本文是对异常处理的扩展

当代码出错时,Python会引发错误和异常,这可能导致程序突然停止。Python还通过try-except提供了异常处理方法。一些最常见的标准异常包括IndexError,ImportError,IOError,ZeroDivisionError,TypeError和FileNotFoundError。用户可以使用异常类创建自己的错误。

创建用户定义的异常

程序员可以通过创建新的异常类来命名自己的异常。需要直接或间接从Exception类派生异常。尽管不是强制性的,但大多数异常的名称都以“错误”结尾,类似于python中标准异常的命名。例如:

# 创建用户定义异常的python程序  # 类MyError是从超类异常派生的class MyError(Exception):       # 构造函数或初始值设定项    def __init__(self, value):         self.value = value       # __str_uu是print()值    def __str__(self):         return(repr(self.value))   try:     raise(MyError(3*2))   # 异常值存储错误except MyError as error:     print('发生了新的异常: ',error.value)

输出:

'发生了新的异常: 6'

完全了解异常类

要了解有关类异常的更多信息,请看以下代码

help(Exception

从超类异常派生错误

当模块需要处理几个不同的错误时,将创建超类异常。常用的方法之一是为该模块定义的异常创建基类。此外,定义了各种子类来为不同的错误条件创建特定的异常类。

# 类错误是从超级类异常派生的class Error(Exception):       # Error是异常的派生类,但是    #此模块中异常的基类    pass  class TransitionError(Error):       # 操作尝试状态时引发    #不允许的过渡。    def __init__(self, prev, nex, msg):         self.prev = prev         self.next = nex           # 抛出的错误消息保存在消息中        self.msg = msg try:     raise(TransitionError(2,3*2,"Not Allowed"))   # 异常值存储错误except TransitionError as error:     print('Exception occured: ',error.msg)

输出:

('Exception occured: ', 'Not Allowed')


如何使用标准异常作为基类?

运行时错误是一个类,是一种标准异常,当生成的错误不属于任何类别时会引发此错误。该程序说明了如何将运行时错误用作基础类,将网络错误用作派生类。以类似的方式,任何异常都可以从Python的标准异常派生而来。

# NetworkError具有基本RuntimeError# 也不例外class Networkerror(RuntimeError):     def __init__(self, arg):         self.args = arg   try:     raise Networkerror("Error")   except Networkerror as e:     print (e.args)

输出:

(“ E”,“ r”,“ r”,“ o”,“ r”)



在各种竞争性网站上进行编码时,许多人一定遇到NZEC错误。顾名思义,NZEC(非零退出代码)发生在您的代码未能返回0时。当代码返回0时,表示它已成功执行,否则将根据错误类型返回其他一些数字。
当程序结束并且应该返回“ 0”以指示是否完成正常并且无法执行时,会导致NZEC。当然,还有更多与NZEC相关的案例。

为何发生NZEC?(一个例子)

在python中,通常多个输入之间用逗号分隔,我们使用input()或int(input())进行读取,但是大多数在线编码平台在测试时都会以空格分隔输入,在这种情况下,输入为int(input())无法正确读取输入并显示NZEC之类的错误。

怎么解决?

例如,考虑一个简单的程序,您必须读取2个整数并将其打印(在输入文件中,两个整数都在同一行中)。假设您有两个整数,如下所示:

23 45


而不使用:

n = int(输入())k = int(输入())

用:

n,k = raw_input().split('')n =整数(n)k =整数(k)

用空格分隔输入。

错误代码

n = int(input()) k = int(input()) print n," ",k

输入:
2 3
当您使用上面的输入IDE中运行以上代码时,您将得到错误:

追溯(最近一次通话):  在第1行的文件“ b712edd81d4a972de2a9189fac8a83ed.py”     n = int(输入())  文件“”,第1行    2 3      ^SyntaxError:解析时出现意外的EOF

当输入在2条不同的2行中时,上面的代码可以正常工作。您可以测试自己。要克服此问题,您需要使用split。

正确的代码

n, k = raw_input().split(" ") n = int(n) k = int(k) print n," ",k

输入:

7 3

输出:

7 3

NZEC错误的一些突出原因

  1. 无限递归或堆栈内存不足。

  2. 输入和输出都与测试用例不完全相同。

  3. 作为在线平台,使用与您的输出与指定输出完全匹配的计算机代码测试程序。

  4. 当您的程序执行基本的编程错误(例如除以0)时,也会显示此类错误。

  5. 检查变量的值,它们很容易受到整数流的影响。

    





推荐阅读

浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报