-
2019-03-15 21:40:52
try: print('正常执行') # 根据业务逻辑判断,需要手动抛出异常 raise Exception(print(a)) #raise Exception('print(a)')#注意这两个的区别,这个带字符串,直接打印字符串里的内容,python把字符串的内容一字不差解析成了异常并打印出来 print('正常结束') except Exception as e: print('出现异常:', e) print('OVER')
更多相关内容 -
python抛出异常及异常传递
2022-02-10 21:14:35Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句和assert语句主动抛出。 使用raise语句抛出异常: 1.使用异常类引发异常 格式如下: raise 异常类 #格式1:使用异常类名引发指定的异常 ...抛出异常:
Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句和assert语句主动抛出。
使用raise语句抛出异常:
1.使用异常类引发异常
格式如下:
raise 异常类 #格式1:使用异常类名引发指定的异常
示例如下所示:
raise NameError
运行界面如下:
2.使用异常类对象引发异常
格式如下:
raise 异常类对象 #格式2:使用异常类的对象引发指定的异常
示例代码如下:
raise NameError()
运行界面如下:
以上代码中的raise之后的NameError()用于创建异常类对象。创建异常类对象时还通过字符串指定异常的具体信息。
示例代码如下:
raise NameError("索引下标超出异常")
运行界面如下所示:
3.重新引发异常:
格式如下:
raise #格式3:使用刚出现过的异常重新引发异常
代码如下:
try: raise NameError except: raise
运行界面:
以上示例中的try语句执行后会出现因raise语句引发的NameError异常,出现异常后except子句会被执行;except子句后的代码又使用raise语句抛出刚刚发生的NameError异常,最终程序因再次抛出异常而终止执行。
raise语句的语法格式总结如下:
1.raise 异常类 #格式1:使用异常类名引发指定的异常
2.raise 异常类对象 #格式2:使用异常类的对象引发指定的异常
3. raise #格式3:使用刚出现过的异常重新引发异常
以上3种格式都是通过raise语句抛出异常。第1种格式和第2种格式是对等的,都会引发指定类型的异常。其中,第一种格式会隐式创建一个该异常类型的对象,第2种格式是最常见的形式,它会直接提供一个该异常类型的对象,第3种格式用于重新引发刚刚发生的异常。
使用assert语句抛出异常:
assert语句又称为断言语句,其语法格式如下所示:
assert 表达式[,异常信息]
以上语法格式的assert后面紧跟一个表达式,表达式的值为False时触发AssertionError异常,值为True时不做任何操作;表达式之后可以使用字符串来描述异常信息。
assert语句可以帮助程序开发者在开发阶段调试程序,以保证程序能够正确运行。
下面使用断言语句判断用户输入的除数是否为0,示例代码如下:
num_one = int(input("请输入被除数:")) num_two = int(input("请输入除数")) assert num_two !=0,'除数不能为0' result=num_one/num_two print(num_one,'/',num_two,'=',result)
运行界面:
以上代码首先会接收用户输入的2个数num_one和num_two,并将num_one和num_two分别作为被除数和除数;然后使用assert语句判定num_two不等于0,若不等于0则进行除法运算,否则会引发AssertionError异常,并提示"除数不能为0";最后输出num_one除以num_two的结果。
异常的传递:
如果程序中的异常没有被处理,默认情况下会将该异常传递到上一级,如果上一级仍然没有处理异常,那么会继续向上传递,直至异常被处理或程序崩溃。
示例如下:
代码示例如下:
def get_width(): #get_width()函数用于计算正方形边长 print("get_width开始执行") num=int(input("请输入除数:")) width_len=10/num print("get_width执行结束") return width_len def calc_area(): #calc_area函数用于计算正方形面积 print("calc_area开始执行") width_len =get_width() print("calc_area执行结束") return width_len*width_len def show_area(): #show_area()函数用于输出正方形的面积 try: print("show_area开始执行") area_val=calc_area() print(f"正方形的面积是:{area_val}") print("show_area执行结束") except ZeroDivisionError as e: print(f"捕捉到异常:{e}") show_area()
以上定义的函数show_area()为程序入口,该函数中调用了calc_area()函数,calc_area()函数中又调用了get_width函数。
不出现异常时的运行机制:
通过对该程序的分析,可知,程序的入口为show_area( ),首先执行函数show_area(),这个函数里面有try-except判断异常机制,识别try子句,无异常的时候,根据代码,首先输出show_area开始执行,之后将calc_area()的值赋给area_val,通过代码可知,calc_area的值可通过上一级的calc_area函数得到,看这段代码,输出calc_area开始执行,之后将get_width的值赋给width_len,与上面相似,可知get_width函数开始运行,输出get_width开始执行,然后输入除数,然后输出get_width执行结束,calc_area执行结束,输出正方形的面积是多少,输出show_area执行结束!
运行界面如下:
有异常的运行机制:
因为只在show_area函数里面存在try-except异常识别机制,当get_width()函数使用变量num接收用户输入的除数,通过语句width_len=10/num计算正方形的边长,如果用户输入的除数值为0,那么程序会引发ZeroDivisionError异常。因为get_width()函数中并没有捕获异常的语句,所以get_width()函数中引发的异常向上传递到calc_area()函数,calc_area()函数中也没有捕获异常的语句,只能将异常继续向上传递到show_area()函数。
show_area函数中设置了异常捕获语句try-except,它在接收到由calc_area()函数传递的异常后,会通过try-except捕获并处理异常。
运行界面如图所示:
-
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2020-09-18 15:25:40主要介绍了Python 异常的捕获、异常的传递与主动抛出异常操作,结合实例形式详细分析了Python针对异常捕获、传递、处理等常见操作技巧,需要的朋友可以参考下 -
Python异常对代码运行性能的影响实例解析
2021-01-01 02:14:20Python的异常处理能力非常强大,但是用不好也会带来负面的影响。我平时写程序的过程中也喜欢使用异常,虽然采取防御性的方式编码会更好,但是交给异常处理会起到偷懒作用。偶尔会想想异常处理会对性能造成多大的影响... -
浅谈python抛出异常、自定义异常, 传递异常
2020-12-25 11:07:44Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。 raise 语句 Python中的raise 关键字用于引发一... -
Python抛出异常详解
2020-05-08 13:22:52Python抛出异常【1】 程序运行过程中 Python解释器遇到一个错误 会停止程序的运行 并且提示一些错误信息 这个 就是异常 程序停止并且提示错误信息的动作叫做抛出异常 抛出异常原因 主动捕获异常 可以增加健壮性 ...Python抛出异常【1】
程序运行过程中 Python解释器遇到一个错误 会停止程序的运行 并且提示一些错误信息 这个 就是异常 程序停止并且提示错误信息的动作叫做抛出异常
抛出异常原因
主动捕获异常 可以增加健壮性
抛出异常的种类
- AssertionError ,断言失败抛出异常;
- AttributeError ,找不到属性抛出异常;
- ValueError , 参数值不正确(类型正确);
- WindowsError/(OSError,IOError,EnvironmentError),I/O相关错误
- UnicodeError,ValueError的子异常,编码错误
- UnicodeDecodeError UnicodeError的子异常 编码,解码错误
- UnicodeEncodeError UnicodeError的子异常 编码,编码错误
- UnicodeTranslateError UnicodeError的子异常 编码,翻译错误
- ConnectionError OSError子异常,连接错误
- BrokenPipeError ConnectionError 子异常 连接管道错误
- ArithmeticError 算术错误的基类
- ZeroDivisionError 算数错误的子类,除法或模运算的第二个参数是零
- BufferError 缓冲区错误
注意 如果不确定需要打印异常种类 只是单纯不想让程序暂停 可以使用基类Exception 但是 Python中不推荐使用这种方法
抛出异常的格式
1.基本语法
try: num = int(input("请输入一个数字:")) print(num) except ValueError as e: print(e) finally: print("抛出异常")
2.解析
关键字try 以及except是 使用Python 解释器主动抛出异常的关键,
Python解释器从上向下执行 当运行try中的某行代码出错,会直接进入except中执行下方代码 try中错行下方的代码不会被运行
except…as… 是固定的语法格式 打印traceback信息
finally 后的代码不管是否抛出异常都会执行
except 的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始
注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量)基本拓展:sys.exc.info
1.初步拓展
try: num = int(input("请输入一个数字:")) print(num) except ValueError as e: exc_type, exc_value, exc_traceback_obj = sys.exc_info() print(exc_type) # 异常的类型 print( exc_value) # 异常的值 print(exc_traceback_obj) #异常的对象 返回堆栈的位置 内存地址
在一般情况下 基本的抛出异常已经足够使用 但是 不排除特殊情况 比如说日志输出等场景 这种场景可能需要进一步的拓展异常的抛出 具体的方法会再下一章进行详细的记录…
-
python抛出异常
2018-08-23 09:31:03当 Python 试图执行无效代码时,就会抛出异常。在第 3 章中,你已看到如何使用 try 和 except 语句来处理 Python 的异常,这样程序就可以从你预期的异常中恢复。但你也可以在代码中抛出自己的异常。抛出异常相当于是...当 Python 试图执行无效代码时,就会抛出异常。在第 3 章中,你已看到如何使用 try 和 except 语句来处理 Python 的异常,这样程序就可以从你预期的异常中恢复。但你也可以在代码中抛出自己的异常。抛出异常相当于是说:“停止运行这个函数中的代码,将程序执行转到 except 语句 ”。抛出异常使用 raise 语句。在代码中,raise 语句包含以下部分:
• raise 关键字;
• 对 Exception 函数的调用;
• 传递给 Exception 函数的字符串,包含有用的出错信息。
例如,在交互式环境中输入以下代码:>>> raise Exception('This is the error message.') Traceback (most recent call last): File "<pyshell#191>", line 1, in <module> raise Exception('This is the error message.') Exception: This is the error message.
如果没有 try 和 except 语句覆盖抛出异常的 raise 语句,该程序就会崩溃,并显示异常的出错信息。通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常会看到 raise 语句在一个函数中,try 和 except 语句在调用该函数的代码中。例如,
打开一个新的文件编辑器窗口,输入以下代码,并保存为 boxPrint.py:def boxPrint(symbol, width, height): if len(symbol) != 1: raise Exception('Symbol must be a single character string.') if width <= 2: raise Exception('Width must be greater than 2.') if height <= 2: raise Exception('Height must be greater than 2.') print(symbol * width) for i in range(height - 2): print(symbol + (' ' * (width - 2)) + symbol) print(symbol * width) for sym, w, h in (('*', 4, 4), ('0', 20, 5), ('x', 1, 3), ('ZZ', 3, 3)): try: boxPrint(sym, w, h) except Exception as err: print('An exception happened: ' + str(err))
这里我们定义了一个 boxPrint() 函数,它接受一个字符、一个宽度和一个高度。它按照指定的宽度和高度,用该字符创建了一个小盒子的图像。这个盒子被打印到屏幕上。假定我们希望该字符是一个字符,宽度和高度要大于 2。我们添加了 if 语句,如果这些条件没有满足,就抛出异常。稍后,当我们用不同的参数调用 boxPrint()时,try/except 语句就会处理无效的参数。这个程序使用了 except 语句的 except Exception as err 形式。如果 boxPrint()返回一个 Exception 对象,这条语句就会将它保存在名为 err 的变量中。Exception 对象可以传递给str(),将它转换为一个字符串,得到用户友好的出错信息。运行 boxPrint.py,输出看起来像这样:
**** * * * * **** OOOOOOOOOOOOOOOOOOOO O O O O O O OOOOOOOOOOOOOOOOOOOO An exception happened: Width must be greater than 2. An exception happened: Symbol must be a single character string.
使用 try 和 except 语句,你可以更优雅地处理错误,而不是让整个程序崩溃。
-
python主动抛出异常不进行捕获程序会终止运行
2022-02-06 15:27:23python中的raise -
python抛异常并且捕获异常代码块 错误原本异常 自定义异常输出
2019-03-05 17:18:57直接上代码,理解代码即可,后续.../usr/bin/python # -*- coding: utf-8 -*- import time import sys try: aa = "bbb" print aaa except Exception, e: print "Error:" + str(e) print "输入错误" sys.exit(... -
python抛出异常的方法
2021-03-05 15:26:56python抛出异常的方法发布时间:2020-08-14 11:10:34来源:亿速云阅读:89作者:小新这篇文章主要介绍python抛出异常的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异常是Python... -
python-异常
2021-02-10 06:26:07除零异常 ZeroDivisionError名称异常 NameError类型异常 TypeError索引异常 IndexError键异常 KeyError值异常 ValueError属性异常 AttributeError迭代器异常 StopIteration错误信息的获取:错误信息中最后一行的第一... -
python 抛出异常的完整写法
2022-04-18 19:30:30python 抛出异常的完整写法 -
python异常处理和日志处理方式
2020-12-23 10:25:54今天,总结一下最近编程使用的python异常处理和日志处理的感受,其实异常处理是程序编写时非常重要的一块,但是我一开始学的语言是C++,这门语言中没有强制要求使用try…catch语句,因此我通常编写代码的时候忽略了... -
Python 主动抛出异常、自定义异常
2021-10-21 10:48:241. 抛出异常 1.1 raise raise 指定要抛出的异常。 对应参数必须是异常的实例或是异常的类(Exception) 例: def fun(x): if x > 5: raise Exception(f"x 不能大于 5,x={x}") """ Traceback (most recent... -
python异常(概念、捕获、传递、抛出)
2019-05-30 21:02:39程序在运行时,如果Python 解释器遇到到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常 程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise)异常 程序开发时,很难将所有的特殊... -
python之抛出异常(raise语句)
2019-06-18 18:37:19用 raise 能够主动抛出异常, 使用【 raise 异常名 】抛出该类异常 raise IndexError 也可以单独使用 raise 再次引发刚发生的异常 try: 1/0 except: print("错误") raise 同时能够指定抛出异常的描述信息 ... -
解决python3捕获cx_oracle抛出的异常错误问题
2021-01-21 17:33:05其实,我只是想在python抛出oracle错误的时候,捕获到具体ora-信息。 写法很简单,这里记录下,以备后用。 try: oracle_check(dbname) except cx_Oracle.DatabaseError as msg: print(msg) 另外,在python3中,... -
python打印异常信息的两种实现方式
2020-09-18 05:50:23今天小编就为大家分享一篇python打印异常信息的两种实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
python 自定义异常和异常捕捉的方法
2020-12-24 20:22:022. raise后的语句是不会被执行了,因为已经抛出异常,控制流将会跳到异常捕捉模块。 3. except 语句可以一个except后带多个异常,也可以用多个语句捕捉多个异常,分别做不同处理。 4. except语句捕捉的异常如果没有... -
python 抛出异常记录
2020-08-27 10:43:40在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 AttributeError #试图访问一个对象没有的树形,比如foo.x,但是foo没有... -
python主动抛出异常和自定义异常
2021-08-06 06:13:08Python 使用 raise 语句抛出一个指定的异常。 raise 唯一的一个参数指定了要被抛出的异常。 它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。 如下: x = 10 if x > 5: raise Exception('x 不... -
Python使用lambda抛出异常实现方法解析
2020-09-16 09:10:34主要介绍了Python使用lambda抛出异常实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
python----主动抛出异常并且捕获异常
2022-04-03 16:50:54在python中,除了代码执行出错python解释器会抛出异常以外 咱们还可以根据应用程序特有的业务需求主动抛出异常 python中提供了一个Exception异常类 在开发时,如果满足特定业务需求时,希望抛出异常,可以 1、创建... -
Python异常的检测和处理方法
2020-12-25 12:19:29执行这个程序时,会抛出: AttributeError: 'int' object has no attribute 'apppend' 我们使用try:except语句进行捕获。 # 捕获异常 a = 123 try: a.apppend(4) except AttributeError: print("数字类型不能... -
python异常抛出
2020-11-29 14:45:17广告关闭腾讯云11.11云上...主动抛出异常raise typeerror(类型错误) # 7. 触发异常try: raise typeerror(类型错误)except exception as e: print(e) # 8. 自定义异常class my...syntaxerror 语法错误 python代码非... -
Python高级:异常概念及处理,异常的抛出与传递
2022-03-14 14:44:06异常的抛出与传递01.异常的抛出raise语句02.assert断言语句03.异常的传递04 with和as环境安装器05打开和关闭文件的异常处理06with和as的执行原理总结 前言 ···异常处理,英文名为exceptional handling, 是代替... -
Python 基础 —— python 异常,抛出异常,自定义异常类
2020-08-13 14:36:431、异常的语法 1)完整的异常处理语法格式: try: print(10/0) except NameError as e: print('出现 NameError 异常') except ZeroDivisionError as e: print('出现 ZeroDivisionError 异常') except ...