前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的用户定义异常与NZEC错误

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

作者头像
用户8460142
发布2023-07-07 10:46:10
1210
发布2023-07-07 10:46:10
举报
文章被收录于专栏:软件测试test软件测试test

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

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

创建用户定义的异常

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

代码语言:javascript
复制
# 创建用户定义异常的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)

输出:

代码语言:javascript
复制
('发生了新的异常: 6')

完全了解异常类

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

代码语言:javascript
复制
help(Exception) 

从超类异常派生错误

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

代码语言:javascript
复制
# 类错误是从超级类异常派生的
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)

输出:

代码语言:javascript
复制
('Exception occured: ', 'Not Allowed')

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

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

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

输出:

代码语言:javascript
复制
(“ E”,“ r”,“ r”,“ o”,“ r”)

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

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

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

怎么解决?

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

代码语言:javascript
复制
23 45

而不使用:

代码语言:javascript
复制
n = int(输入())
k = int(输入())

用:

代码语言:javascript
复制
n,k = raw_input().split('')
n =整数(n)
k =整数(k)

用空格分隔输入。

错误代码

代码语言:javascript
复制
n = int(input()) 
k = int(input()) 
print n," ",k

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

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

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

正确的代码

代码语言:javascript
复制
n, k = raw_input().split(" ") 
n = int(n) 
k = int(k) 
print n," ",k

输入:

代码语言:javascript
复制
7 3

输出:

代码语言:javascript
复制
7 3

NZEC错误的一些突出原因

  1. 无限递归或堆栈内存不足。
  2. 输入和输出都与测试用例不完全相同。
  3. 作为在线平台,使用与您的输出与指定输出完全匹配的计算机代码测试程序。
  4. 当您的程序执行基本的编程错误(例如除以0)时,也会显示此类错误。
  5. 检查变量的值,它们很容易受到整数流的影响。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档