python错误和异常

Python 有两种错误很容易辨认:语法错误和异常

 

assert用于判断一个表达式,在表达式条件为 false 的时候触发异常:

assert 1 == 1
assert 1 == 2

结果会报错:

assert 1 == 2
AssertionError

 

语法错误,或者称之为解析错

比如:

print('大湘菜']

结果会报错:

print('大湘菜']
               ^
SyntaxError: closing parenthesis ']' does not match opening parenthesis '('

 

异常

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常

比如:

print('大湘菜' + 1)

结果会报错:

print('大湘菜' + 1)
TypeError: can only concatenate str (not "int") to str

 

异常捕捉可以使用try/except语句,一般形式为:

try:

  statement

except:

  statement

 

try 语句按照如下方式工作:

首先,执行 try 子句

如果没有异常发生,忽略 except 子句,try 子句执行后结束

如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行

如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中

 

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组:

try:
    print('大湘菜' + 1)
except (TypeError, NameError):
    print('出错了')

结果为:

出错了

 

最后一个except子句可以忽略异常的名称,它将被当作通配符使用:

try:
    print('大湘菜' + 1)
except NameError:
    print('there is a NameError')
except:
    print('there is an unexpected error')

结果为:

there is an unexpected error

 

try/except语句有一个可选的else子句,基本形式为:

try:

  statement

except:

  statement(发生异常时执行的代码)

else:

  statement(没有异常时执行的代码)

 

try-finally语句无论是否发生异常都将执行最后的代码,它定义了无论在任何情况下都会执行的清理行为,基本形式为:

try:

  statement

except:

  statement(发生异常时执行的代码)

else:

  statement(没有异常时执行的代码)

finally:

  statement(不管有无异常都会执行的代码)

如果一个异常在try子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在finally子句执行后被抛出

 

一些对象预定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行,比如用open()方法打开文件后,如果没有使用close()方法关闭,那么文件会保持打开状态。关键字with语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行清理方法(比如关闭文件):

with open('chat.txt') as f:
    for line in f:
        print(line)

结果为:

today is a nice day

how do you do?

 

raise语句用于抛出指定的异常,唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类):

x = -1
if x <= 0:
    raise Exception('x should be a positive number')

结果会报错:

raise Exception('x should be a positive number')
Exception: x should be a positive number

 

一个简单的raise语句就可以把异常再次抛出:

try:
    raise NameError('a bad name')
except NameError:
    print('''it's NameError''')
    raise

结果会报错:

it's NameError
Traceback (most recent call last):
  File "D:\Pycharm\pythonProject\main.py", line 2, in <module>
    raise NameError('a bad name')
NameError: a bad name

 

用户可以自定义异常类,这个在python面向对象会仔细介绍

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python错误和异常 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python循环语句

    while循环 一般形式: while condition:   statement1 else:   statement2   a = 0 while a < 3: print(a) a = a + 1 else: print(a, ” 大于或等于3″) 结果为: 0 1 2 3 大于或等于3   无限循环: while True: # 或者一个永远…

    Python开发 2023年4月2日
    00
  • python面向对象

    传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,…

    Python开发 2023年4月2日
    00
  • pythonFile方法

    open()方法用于打开一个文件,并返回文件对象,注意最后一定要关闭文件对象,即调用close()方法 一般形式为: open(file, mode= , buffering= , encoding= , errors= , newline= , closefd= , opener= )   参数说明: file: 必需,文件路径(相对或者绝对路径) mod…

    Python开发 2023年4月2日
    00
  • python模块

    python模块是一个py文件,一个模块只会被导入一次   python在编译或安装的时候会确定搜索路径,使用import语句的时候,python解释器就从搜索路径(即一系列目录名)中查找模块 import sys print(sys.argv) # 命令行参数 print(sys.path) # 路径 结果为: [‘D:/Pycharm/pythonPro…

    Python开发 2023年4月2日
    00
  • python迭代器和生成器

    iter()用于创建迭代器,next()用于输出迭代器的下一个元素: names = [‘微湘菜’, ‘小湘菜’, ‘大湘菜’, ‘巨湘菜’] iterName = iter(names) for i in range(4): print(next(iterName)) 结果为: 微湘菜 小湘菜 大湘菜 巨湘菜   创建一个迭代器需要在类中实现两个方法 __…

    Python开发 2023年4月2日
    00
  • python命名空间和作用域

    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的   命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间   相同的对象名称可以存在于多个命名空间中   作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问…

    Python开发 2023年4月2日
    00
  • python爬虫

    Web请求过程 1、服务器渲染:在服务器那边直接把数据和html整合在一起,统一返回给浏览器 在页面源代码中能看到数据 2、客户端渲染:第一次请求只有一个html骨架,第二次请求拿到数据,进行数据展示(一般为XHR) 在页面源代码中看不到数据 <可用检查网页或者F12来查看>   HTTP协议 Hyper Text Transfer Protoc…

    Python开发 2023年4月2日
    00
  • python基本数据类型

    python的变量不需要声明,但在使用前必须要赋值   多个变量赋值: a = b = c = 1 x, y, z = 1, True, ‘大湘菜’   python有六个标准的数据类型: Number、String、Tuple、List、Set、Dictionary,其中前三者为不可变数据,后三者为可变数据   Number: a, b, c, d = 1…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部