前提条件- 本文是对异常处理的扩展。 当代码出错时,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时,表示它已成功执行,否则将根据错误类型返回其他一些数字。 为何发生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 输入: 追溯(最近一次通话): 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错误的一些突出原因
|
|
来自: 软件测试test > 《python自动化》