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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【雷军】给程序员的五点建议--如何成为编程高手并以此创业

除非特别注明&#xff0c;鸡啄米文章均为原创转载请标明本文地址&#xff1a;http://www.jizhuomi.com/career/286.html写在前面&#xff1a;此篇文章出自雷军之手&#xff0c;是他为软件开发2.0技术大会准备的演讲稿&#xff0c;但由于某些原因没有派上用场。这里跟大家分享下…

重构,改善既有代码的设计--第八章感悟

1.如果你看到一个数组的行为方式很像一个数据结构&#xff0c;就可以把数组变成对象 private int aa,变成: int aa; public int GetAA() {return aa;}//好处&#xff1a;使得获取的数据更加有效 转载于:https://www.cnblogs.com/ITGirl00/p/3696741.html

计算机网络重要机制(一)可靠数据传输

操作系统&#xff0c;计算机网络都属于计算机系统&#xff0c;为了使得整个系统运行起来&#xff0c;人们根据当时的硬件条件和理论认识设计了各种的算法&#xff08;也可以叫机制&#xff09;&#xff0c;这些机制有些被抛弃&#xff0c;有些被进化。所以操作系统、计算机网络…

命名空间和作用域

一&#xff0c;namespace namespace是名字到对象的映射&#xff0c;python里面的大部分命名空间由字典实现。如果有性能问题&#xff0c;会更改。 命名空间的举例 •存放内置函数的集合&#xff08;abs()这种函数&#xff0c;和内建的异常&#xff09; •模块中的全局名称 •函…

[转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法

本文从三方面总结迭代器 迭代器的思想迭代器相应型别及traits思想__type_traits思想一 迭代器思想 迭代器的主要思想源于迭代器模式&#xff0c;其定义如下&#xff1a;提供一种方法&#xff0c;使之能够依序巡防某个聚合物&#xff08;容 器&#xff09;所含的元素&#xff0c…

python类

一&#xff0c;类 1&#xff0c;类是摸板&#xff0c;里面有组合数据&#xff0c;实现功能的方法。 2&#xff0c;类里面有可以改变自身的方法__init__函数 3&#xff0c;类和模块类似&#xff0c;运行时创建&#xff0c;创建后修改 4&#xff0c;类成员通常是public&#xff…

关于Coursera视频不能播放问题

1&#xff0c;打开C:\Windows\System32\drivers\etc目录&#xff1b; 2&#xff0c;修改host文件&#xff0c;在最后添加52.84.246.72 d3c33hcgiwev3.cloudfront.net&#xff0c;保存&#xff1b; 3&#xff0c;重启浏览器或者刷新Coursera视频网址&#xff0c;搞定。

Web Form要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...

1.先将aspnet.scriptmanager.jquery.dl 复制到bin (网站根目录下的bin文件夹找不到&#xff0c;看看下面的图片中点击[显示所有文档]) 文件夹下。 2.在网站根目录下scripts文件夹,向里边添加jquery-1.7.2.min.js和jquery-1.7.2.js(可根据自己需要使用不同的版本&#xff09;…

python继承多重继承

一&#xff0c;基本语法 class MyClass(BaseClass):def __init__(self):print(...)class MyDefineClass(object):def __init__(self):print(继承自object类)MyDefineClass.__init__(None) # 属性访问 me MyDefineClass() # 实例对象 继承自object类 继承自object类 二&#x…

第14章 任务和特权级保护

学习这一章感觉异常的困难&#xff0c;所以学习从14-17章&#xff0c;每一章学扎实了&#xff0c;弄懂了每个问题再进行下一章&#xff0c;后一章都是在前一章的基础上增加一些数据结构和机制。另外读的时候可以各个击破&#xff0c;每次只搞明白一个小问题。读这一章可能需要两…

python 生成器推导式

# 生成器 generator 用yield来返回数据 def reverse(data):for i in range(len(data) - 1, -1, -1): # range(start, end, step) 不包括endyield data[i]def test_generator():for char in reverse(abc):print(char)# test_generator()c b a生成器表达式&#xff1a;与列表推导…

Windows XP系统安装SQL Server 2005(开发版)图解

转自Windows XP系统安装SQL Server 2005(开发版)图解 安装前提:由于有些从网上的下载的项目需要导入SQL Server 2005的数据文件&#xff0c;因此&#xff0c;今天便安装了这个数据库&#xff0c;我的系统中已经安装了SQL Server2000所以是在它之上安装SQL Server2005的。 一、数…

《软件工程(C编码实践篇)》课后感

Fibonacci&#xff08;与最后申请证书的姓名务必一致&#xff09; 原创作品 《软件工程&#xff08;C编码实践篇&#xff09;》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 1&#xff08;20分&#xff09;软件工程&#xff08;C编码实践篇&#xff09;学习总…

用turtle画各种各样的数学图形

ps&#xff0c;用turtle导入小海龟来画图。画图代码都要导入海龟库哦&#xff0c;见下面第一行。 import turtle as t直线 # 画直线 def draw_line():pen t.Pen()pen.fd(200) # 直线默认水平方向 draw_line() 画正方形 def draw_square():pen t.Pen()for i in range(4): …

从网络字节流中提出整数

最近在做一个项目&#xff0c;就是设计一套通信协议&#xff0c;利用nginx来实现解析。协议内容是包括整数和字符串&#xff0c;现在客户端收到服务器端发送的网络字节流时&#xff0c;需要从中提取出整数&#xff0c;再根据整数决定发送数据量的大小。如下所示&#xff1a; p …

实验3 系统调用

系统调用 实验目的 建立对系统调用接口的深入认识掌握系统调用的基本过程能完成系统调用的全面控制为后续实验做准备 实验内容 此次实验的基本内容是&#xff1a;在Linux 0.11上添加两个系统调用&#xff0c;并编写两个简单的应用程序测试它们。 iam() 第一个系统调用是iam()&a…

python标准库(一)

操作系统接口os 切换目录 >>> import os>>> os.getcwd() # 得到当前工作目录C:\\Users>>> os.chdir(F:\\) # 切换工作目录到F盘>>> os.system(mkdir tody) # 在f盘创建一个叫tody的文件夹0import os 与 from os import * &#xff0c;要…

[Java] webservice soap,wsdl 例子

java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟&#xff0c;但要真正要用起来还需时日!! 由于毕业设计缘故&#xff0c;我看了很多关于webservice方面的知识&#xff0c;今天和大家一起来研究研究webservice的各种使用方法。 一、利用jdk web服务api…

C语言ASM汇编内嵌语法zz

朋友们&#xff0c;我是从http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html这里转载过来的&#xff0c;很不错就收藏了&#xff0c;如果转载&#xff0c;请注明初始链接。 .3 GCC Inline ASM GCC 支持在C/C代码中嵌入汇编代码&#xff0c;这些汇编代码被称作…

python标准库(二)

格式化输出 reprlib 库用来格式化 >>> import reprlib >>> reprlib.repr(set(aabbccddeeeff)) "{a, b, c, d, e, f}" >>>对集合能排序 >>> reprlib.repr(set(fdajfejaa)) "{a, d, e, f, j}" >>>pprint库用…