py语法错误与异常处理
python的异常处理
- 一,语法错误(解析错误)
- 1,解析错误invalid syntax
- 二,内置的异常
- 1,内置异常
- 三,异常的处理
- 1,基本的try except语句
- 2,except语句
- 3,eles语句
- 4,异常参数
- 5,处理调用函数的异常
- 四,抛出异常raise关键字
- 1,强制抛出异常
- 2,处理并抛出异常
- 五,用户自定义异常(异常类)
- 1,以error结尾,继承父类
- 2,代码实现
- 六,finally语句
- 1,try finally
- 2,return在异常中
- 3,算除法demo
- 4,关于finally注意的点
- 5,用finally关闭文件流
- 七,预定义清理操作
- 1,自动关闭流的操作
一,语法错误(解析错误)
1,解析错误invalid syntax
>>> flag = True>>> if flag print(flag)File "<stdin>", line 1if flag print(flag)^SyntaxError: invalid syntax箭头指的地方少了 :号>>> if flag:... print(flag)...True
二,内置的异常
1,内置异常
- 内置异常是python语句运行时发生的异常
- 分子为0,不存在的名称,类型错误
>>> 1/0 # ZeroDivisionErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>ZeroDivisionError: division by zero>>>>>> var + 3 # NameErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'var' is not defined>>>>>> '2' + 3 # TypeErrorTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: can only concatenate str (not "int") to str>>>
三,异常的处理
1,基本的try except语句
- 输入句子,直到是整数结束
def test():while True:try:x = int(input('请输入整数:\n'))print(x)breakexcept ValueError:print('噢哦,输入数字,再来一次...')
try的工作原理
• 首先,执行 try 子句 (try 和 except 关键字之间的(多行)语句)。• 如果没有异常发生,则跳过 except 子句 并完成 try 语句的执行。• 如果在执行try 子句时发生了异常,则跳过该子句中剩下的部分。然后,如果异常的类型和 except 关键字后面的异常匹配,则执行 except 子句 ,然后继续执行 try 语句之后的代码。• 如果发生的异常和 except 子句中指定的异常不匹配,则将其传递到外部的 try 语句中;如果没有找到处理程序,则它是一个未处理异常,执行将停止并显示如上所示的消息。
2,except语句
- 见异常抛出就结束程序。except,可以用元组接收异常。
def test1():try:print(1 + '1', 1/0)except (TypeError, ZeroDivisionError):raise
'''
print(1 + '1', 1/0)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
'''
- except后面的异常可以省略,谨慎使用,可能处理不到别的异常
def except_strip():import systry:f = open('TestError.py', 'r') # oserror 打开不了s = f.readline()i = int(s.strip()) # 可能转换不成数字except OSError as err:print('oserror', err)except ValueError as v:print('转换不了', v)except:print('unexcept error', sys.exc_info()[0]) # 其它的不确定错误raisefinally:f.close()
3,eles语句
- 如果异常在try里面不引发,可以把不引发异常的代码写在else句子里面
def else_except():import sysfor arg in sys.argv[0:]:try:f = open(arg, 'r', encoding='UTF-8')except OSError:print('不能打开', arg)else: # 没用错误,正常执行print('下面是读取的本文件: \n', f.read())f.close()
4,异常参数
- 发生异常时,它可能具有关联值,称为异常参数,参数的存在和类型取决于异常类型。 Exception.args() 返回一异常参数的元组
def except_args():try:raise Exception('arg1', 'arg2')except Exception as e:print(type(e))print(e.args) # ('arg1', 'arg2')print(e)x, y = e.args # 解包参数print(x, y)
5,处理调用函数的异常
def division():print(1/0)passdef my_fails():try:division()except ZeroDivisionError as e:print(e)my_fails()
四,抛出异常raise关键字
1,强制抛出异常
>>> raise NameError('I am wrong...')Traceback (most recent call last):File "<stdin>", line 1, in <module>NameError: I am wrong…
- 参数可简写
>>> raise NameErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError>>>
2,处理并抛出异常
>>> try:... raise NameError... except NameError:... print('name wrong')... raise...name wrongTraceback (most recent call last):File "<stdin>", line 2, in <module>NameError>>>
五,用户自定义异常(异常类)
1,以error结尾,继承父类
- 程序可以通过创建新的异常类来命名它们自己的异常。异常通常应该直接或间接地从 Exception 类派生。
2,代码实现
# 异常类
class Error(Exception):# 用于异常的父类passclass InputError(Error):def __init__(self, expression, msg):self.expression = expressionself.msg = msgclass TransitionError(Error):def __init__(self, previous, next, msg):self.previous = previousself.next = nextself.msg = msg
六,finally语句
1,try finally
>>> try:... raise KeyboardInterrupt... finally:... print('hello world')... hello worldTraceback (most recent call last):File "<stdin>", line 2, in <module>KeyboardInterrupt
2,return在异常中
def bool_return():try:return Truefinally:return False print(bool_return())
3,算除法demo
def divide(x, y):try:result = x / yexcept ZeroDivisionError:print('余数不为0')else:print('结果是:', result)finally:print("我会被打印,因为我是必须被执行的。")divide(1, 0)divide('1', '1')
# 没有对应的NameError处理,所以会在finally执行后,引发异常
4,关于finally注意的点
• 如果在执行 try 子句期间发生了异常,该异常可由一个 except 子句进行处理。如果异常没有被某个 except 子句所处理,则该异常会在 finally 子句执行之后被重新引发。
• 异常也可能在 except 或 else 子句执行期间发生。同样地,该异常会在 finally 子句执行之后被重新引发。
• 如果在执行 try 语句时遇到一个 break, continue 或 return 语句,
则 finally 子句将在执行 break, continue 或 return 语句之前被执行。
• 如果 finally 子句中包含一个 return 语句,
则返回值将来自 finally 子句的某个 return 语句的返回值,
而非来自 try 子句的 return 语句的返回值。
5,用finally关闭文件流
try:f = open('file_name', 'r', encoding='utf-8')f.read()
except:print('unexcept wrong...')raise
finally:if "f" in locals(): # 局部变量作用域的集合print(f)f.close()
- 可以关闭数据库连接,网络流
七,预定义清理操作
1,自动关闭流的操作
>>> f = open('TestError.py', 'r', encoding = 'utf-8') >>> f.read(1)''>>> 上面的代码并没用关流,但是我可能读取文件出错了,f文件流一直开着。用with就可以了,遇到问题时,f也会关闭>>> with opne('1.txt', 'r') as f:... f.read()... Traceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'opne' is not defined>>> fTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'f' is not defined
py语法错误与异常处理相关推荐
- python3语法错误-【Python3之异常处理】
一.错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^ SyntaxError: inva ...
- python语法错误修改_python基础之错误、调试(异常处理)
在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的. 有的错误是用户输入造成的,比如让用 ...
- Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
文章的标题看似自相矛盾,然而我在"正确"二字上打了引号.我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点. 看下面这段程序.方法pleas ...
- python中语法错误-Python语法错误与异常及异常处理方法
回顾 在Python进阶记录之基础篇(二十)中,我们介绍了Python面向对象中的类方法和静态方法,以及类中拥有特殊功能的魔法函数.需要重点掌握类方法和静态方法的概念和基本用法,理解魔法函数的作用冰女 ...
- python代码中的中文语法错误:SyntaxError: Non-ASCII character ‘\xe5‘ in file trade.py on line 7
编写的python程序中使用了中午,执行的时候报了上述语法错误.经过排查原因如下: 我使用的解释器的版本是python2的,Python 2默认的编码格式是ASCII,如果直接使用中文就会报如下错误: ...
- python语法错误类型_python常见报错类型和异常处理
更新ing 常见的报错类型和简析.异常处理.其他类型的报错(异常)类型简介.自定义异常 常见的报错类型和简析: 报错类型 报错内容 错误类型判断 错误解决方式 AttributeError 属性错误: ...
- python setup.py install 提示语法错误_python – 使用“’packages’:[],”安装setup.py时无效的语法...
我是编程新手,过去几周我一直在研究 python.大多数指令来自资源"学习 Python的艰难之路". 现在我的问题,我刚刚开始进行测验,基本上你已经完成并安装了自己的setup. ...
- python语法错误概述_python语法错误
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我是python中的新手,当我想在模块中编译代码时,我遇到语法错误:invail ...
- python中语法错误-Python3 错误和异常
Python3 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python 有两种错误很容易辨认:语法错误 ...
最新文章
- iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
- Pixhawk原生固件PX4之顶层软件结构
- Ural_1353. Milliard Vasya's Function(DP)
- STM32H743+CubeMX-串口重定向printf
- 怎么创建python django项目_python怎么创建django
- Linux中的两种守护进程stand alone和xinetd
- 冠军奖 3 万元!CSDN×易观算法大赛火热进行中
- 最简单的基于DirectShow的示例:获取Filter信息
- 从 0 开始机器学习 - 机器学习系统的设计与误差分析
- EDI 公开课:EDI 系统集成之数据库方案
- HTML表格(HTML 表格的使用,收藏这一篇就够了)
- 计算机d盘无法格式化,为什么不能格式化D盘?D盘无法格式化的解决方法
- 计算机应用基础个人简历制作,计算机应用基础信息技术基础《项目3-4制作个人简历》教案...
- android设置管理员权限设置,android 获取超级管理员权限,进行锁屏、恢复出厂设置...
- linux下使用C语言实现MQTT通信(三丶总结经验)
- jfinal中json字符串转对象类
- 大一 C语言课程设计
- 每日一题 --- P1093 [NOIP2007 普及组] 奖学金[洛谷][JAVA]
- Meta AI:让手绘小人动起来
- jquery选择器中含有不含有空格的问题
热门文章
- 前端学习(205):animation动画库
- spring mvc学习(48):java判断系统是linux还是windows系统
- 第二十四期:面试问:Kafka为什么速度那么快?该怎么回答
- 无线网卡共享Internet访问到电脑有线接口注意事项
- Java jdk中的部分工具javac javaw javaws javadoc javah javap jar jdb jps的作用
- 微信小程序:生命周期
- [Github推荐]CVPR2019录用论文下载及可视化论文网站
- python 三维地球_用python生成地球运动的动态模拟动态图
- NOIp2018滚粗记
- hdu 2196 computer