返回顶部
首页 > 资讯 > 后端开发 > Python >Python3使用中有哪些错误和异常
  • 942
分享到

Python3使用中有哪些错误和异常

2023-06-27 16:06:03 942人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python3使用中有哪些错误和异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3使用中有哪些错误和异常”吧!语法错误Python 的语法错误或者称之为解析

这篇文章主要讲解了“python3使用中有哪些错误和异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3使用中有哪些错误和异常”吧!

Python3使用中有哪些错误和异常

语法错误

Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例

>>>while True print('Hello world') File "", line 1, in ?   while True print('Hello world')                  ^SyntaxError: invalid syntax

这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号 : 。

语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。

异常

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

大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:

>>>10 * (1/0)             # 0 不能作为除数,触发异常Traceback (most recent call last): File "", line 1, in ?ZeroDivisionError: division by zero>>> 4 + spam*3             # spam 未定义,触发异常Traceback (most recent call last): File "", line 1, in ?NameError: name 'spam' is not defined>>> '2' + 2               # int 不能与 str 相加,触发异常Traceback (most recent call last): File "", line 1, in ?TypeError: Can't convert 'int' object to str implicitly

异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。

错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。

异常处理

try/except

异常捕捉可以使用 try/except 语句。 Python3使用中有哪些错误和异常 以下例子中,让用户输入一个合法的整数,但是允许用户中断这个程序(使用 Control-C 或者操作系统提供的方法)。用户中断的信息会引发一个 KeyboardInterrupt 异常。

while True:   try:       x = int(input("请输入一个数字: "))       break   except ValueError:       print("您输入的不是数字,请再次尝试输入!")

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

首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。

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

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

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

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

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

except (RuntimeError, TypeError, NameError):pass

最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。

import systry:   f = open('myfile.txt')   s = f.readline()   i = int(s.strip())except OSError as err:   print("OS error: {0}".fORMat(err))except ValueError:   print("Could not convert data to an integer.")except:   print("Unexpected error:", sys.exc_info()[0])   raise

try/except…else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

else 子句将在 try 子句没有发生任何异常的时候执行。 Python3使用中有哪些错误和异常

以下实例在 try 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容:

for arg in sys.argv[1:]:   try:       f = open(arg, 'r')   except IOError:       print('cannot open', arg)   else:       print(arg, 'has', len(f.readlines()), 'lines')       f.close()

使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。

异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。例如:

>>>def this_fails():       x = 1/0 >>> try:       this_fails()   except ZeroDivisionError as err:       print('Handling run-time error:', err) Handling run-time error: int division or modulo by zero
try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。 Python3使用中有哪些错误和异常 以下实例中 finally 语句无论异常是否发生都会执行: 实例

try:   runoob()except AssertionError as error:   print(error)else:   try:       with open('file.log') as file:           read_data = file.read()   except FileNotFoundError as fnf_error:       print(fnf_error)finally:   print('这句话,无论异常是否发生都会执行。')
抛出异常

Python 使用 raise 语句抛出一个指定的异常。 raise语法格式如下:

raise [Exception [, args [, traceback]]]

Python3使用中有哪些错误和异常 以下实例如果 x 大于 5 就触发异常:

x = 10if x > 5:   raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

执行以上代码会触发异常:

x = 10if x > 5:   raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

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

如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

>>>try:       raise NameError('HiThere')   except NameError:       print('An exception flew by!')       raise An exception flew by!Traceback (most recent call last): File "", line 2, in ?NameError: HiThere
用户自定义异常

你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:

>>>class MyError(Exception):       def __init__(self, value):           self.value = value       def __str__(self):           return repr(self.value) >>> try:       raise MyError(2*2)   except MyError as e:       print('My exception occurred, value:', e.value) My exception occurred, value: 4>>> raise MyError('oops!')Traceback (most recent call last): File "", line 1, in ?__main__.MyError: 'oops!'

在这个例子中,类 Exception 默认的 init() 被覆盖。

当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类:

class Error(Exception):   """Base class for exceptions in this module."""   passclass InputError(Error):   """Exception raised for errors in the input.   Attributes:       expression -- input expression in which the error occurred       message -- explanation of the error   """   def __init__(self, expression, message):       self.expression = expression       self.message = messageclass TransitionError(Error):   """Raised when an operation attempts a state transition that's not   allowed.   Attributes:       previous -- state at beginning of transition       next -- attempted new state       message -- explanation of why the specific transition is not allowed   """   def __init__(self, previous, next, message):       self.previous = previous       self.next = next       self.message = message

大多数的异常的名字都以”Error”结尾,就跟标准的异常命名一样。

定义清理行为

try 语句还有另外一个可选的子句,它定义了无论在任何情况下都会执行的清理行为。 例如:

>>>try:...     raise KeyboardInterrupt... finally:...     print('Goodbye, world!')...Goodbye, world!Traceback (most recent call last): File "", line 2, in KeyboardInterrupt

以上例子不管 try 子句里面有没有发生异常,finally 子句都会执行。

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

下面是一个更加复杂的例子(在同一个 try 语句里包含 except 和 finally 子句):

>>>def divide(x, y):       try:           result = x / y       except ZeroDivisionError:           print("division by zero!")       else:           print("result is", result)       finally:           print("executing finally clause") >>> divide(2, 1)result is 2.0executing finally clause>>> divide(2, 0)division by zero!executing finally clause>>> divide("2", "1")executing finally clauseTraceback (most recent call last): File "", line 1, in ? File "", line 3, in divideTypeError: unsupported operand type(s) for /: 'str' and 'str'
预定义的清理行为

一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。 这面这个例子展示了尝试打开一个文件,然后把内容打印到屏幕上:

for line in open("myfile.txt"):   print(line, end="")

以上这段代码的问题是,当执行完毕后,文件会保持打开状态,并没有被关闭。

关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:

with open("myfile.txt") as f:   for line in f:       print(line, end="")

以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。

感谢各位的阅读,以上就是“Python3使用中有哪些错误和异常”的内容了,经过本文的学习后,相信大家对Python3使用中有哪些错误和异常这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python3使用中有哪些错误和异常

本文链接: https://lsjlt.com/news/311860.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python3使用中有哪些错误和异常
    这篇文章主要讲解了“Python3使用中有哪些错误和异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3使用中有哪些错误和异常”吧!语法错误Python 的语法错误或者称之为解析...
    99+
    2023-06-27
  • Python3错误和异常知识点有哪些
    这篇文章主要讲解了“Python3错误和异常知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3错误和异常知识点有哪些”吧!语法错误Python 的语法错误或者称之为解析...
    99+
    2023-06-02
  • Python3 错误和异常
    Edit笔记内容:Python3 错误和异常 笔记日期:2017-11-12Python3 错误和异常语法错误异常异常处理抛出异常用户自定义异常finally语句预定义的清理行为异常处理机制概述: 异常处理,是编程语言或计算机硬件里的一种机...
    99+
    2023-01-31
    异常 错误
  • python中异常和错误的区别有哪些
    在Python中,异常和错误是两个不同的概念。1. 异常(Exception):是程序在运行时可能遇到的一些意外情况或错误。当程序发...
    99+
    2023-08-14
    python
  • php异常和错误的区别有哪些
    这篇文章给大家分享的是有关php异常和错误的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php异常和错误的区别:1、PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的;2、PHP...
    99+
    2023-06-14
  • Python中的异常处理和错误类型有哪些?
    Python中的异常处理和错误类型有哪些?Python是一种非常流行的编程语言,它提供了强大的异常处理机制,使得开发人员能够更好地控制和处理代码中可能出现的错误。在Python中,异常是指代码执行过程中可能遇到的问题或错误,而异常处理则是一...
    99+
    2023-10-22
    Python 异常处理 错误类型
  • 一文了解Python3的错误和异常
    目录1.错误和异常2.异常处理try/excepttry/except…elsetry-finally3.抛出异常4.assert(断言)1.错误和异常 Python ...
    99+
    2024-04-02
  • C# foreach使用中常见的错误有哪些
    这篇文章主要讲解了“C# foreach使用中常见的错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# foreach使用中常见的错误有哪些”吧!在做项目时经常会碰到用C# for...
    99+
    2023-06-17
  • Java中异常处理误区有哪些
    这篇文章将为大家详细讲解有关Java中异常处理误区有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。误区一、异常的选择图 1. 异常分类图 1 描述了异常的结构,其实我们都知道异常分检测异常和非检测异常...
    99+
    2023-05-30
    java
  • Java中重要的错误处理机制异常有哪些
    这篇文章主要介绍“Java中重要的错误处理机制异常有哪些”,在日常操作中,相信很多人在Java中重要的错误处理机制异常有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中重要的错误处理机制异常有哪些...
    99+
    2023-06-15
  • JavaScript错误和调用栈常识都有哪些
    JavaScript错误和调用栈常识都有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。大多数工程师可能并没留意过 JS 中错误对象、错误堆...
    99+
    2024-04-02
  • SQL中有哪些常见的错误
    这篇文章给大家介绍SQL中有哪些常见的错误,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如...
    99+
    2024-04-02
  • MySQL中有哪些常见SQL错误
    本篇文章为大家展示了 MySQL中有哪些常见SQL错误,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常见SQL错误用法1. LIMIT 语句分页查询是最常用的场景之...
    99+
    2024-04-02
  • JavaScript中常见的错误有哪些
    这篇文章主要讲解了“JavaScript中常见的错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中常见的错误有哪些”吧!Java...
    99+
    2024-04-02
  • Java中常犯的错误有哪些
    本篇内容介绍了“Java中常犯的错误有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 忽略访问修饰符虽然有点莫名其妙,但候选者真的经...
    99+
    2023-06-16
  • Python中有哪些常见的错误
    本篇文章为大家展示了Python中有哪些常见的错误,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、忘记在if,for,def,elif,else,class等声明末尾加 :会导致“SyntaxEr...
    99+
    2023-06-16
  • mysql中有哪些常用的错误代码
    mysql中有哪些常用的错误代码,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  mysql常用错误代码大全:  130 :文...
    99+
    2024-04-02
  • JS使用Promise时常见的错误有哪些
    本文小编为大家详细介绍“JS使用Promise时常见的错误有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS使用Promise时常见的错误有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Promise...
    99+
    2023-07-04
  • MySQL常见错误有哪些
    小编给大家分享一下MySQL常见错误有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、Can’t connect to M...
    99+
    2024-04-02
  • 常见CSS错误有哪些
    这篇文章将为大家详细讲解有关常见CSS错误有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:区别IE6与FF: background:orange;*background:blue; 区别IE...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作