挑战30天学完Python:Day15 错误类型

news2025/1/14 20:28:40

📘 Day 14

🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点知识,但又没有系统学习的使用者。总之如果你想提升自己的Python技能,欢迎加入《挑战30天学完Python》

Python错误类型

当我们编写代码的时候,通常会出现些拼写错误或其他一些未知的错误。如果代码运行失败,Python解析器一般会报出相关的错误提示,其中包含了代码出错的行和错误类型。它有时候还会给出对应修复建议。了解编程语言中不同类型的错误将帮助我们快速调试代码,也使我们更好地完成我们的工作。

接下来,让我们来看一些在Python中常见的错误类型。首先让我们打开Python交互式终端。还记得如何打开吗?很简单,只需要在PC电脑上打开“终端”然后输入python即可进入Python交互模式。
在这里插入图片描述

SyntaxError

SyntaxError表示语法错误。先看一个具体例子,请在控制台敲下如下 print 'hello world' 这句话:

C:\Users>python
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'hello world'
  File "<stdin>", line 1
    print 'hello world'
          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello world')?
>>>

上述的代码就出现了一个语法使用错误,因为在Python3+的版本里print打印需要括号,也可以看到在最后它给你出你的对应的提示。现在让我们按照正确的语法修复它。
As you can see we made a syntax error because we forgot to enclose the string with parenthesis and Python already suggests the solution. Let us fix it.

>>> print('hello world')
hello world
>>>

错误的提示关键词是 SyntaxError. 按照提示修复后我们再次运行程序顺利通过。让我们继续看更多的错误类型。

NameError

NameError表示名词错误,一般指变量命名。同样先看能出现此错误的例子:

C:\Users\>python
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print(age)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>>
>>>

如你所看到的信息,变量名 age 没有被定义,但我们试图引用它并想打印出来,因此出现了一个 NameError 错误提示。现在,让我们通过声明它并赋值来修复这个问题。

>>> age = 18
>>> print(age)
18
>>>

错误类型为 NameError 。我们通过定义变量名来解决错误。

IndexError

IndexError表示索引错误,通常出现在list的下角标引用超出范围。

>>> numbers = [1,2,3,4,5]
>>> numbers[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of rang
>>>

在上边的例子中,Python引发了一个 IndexError 错误,因为定义的数字列表索引范围仅为0-4,因此最终程序抛出了索引超出范围错误。

ModuleNotFoundError

ModuleNotFoundError 表示模块没有找到的错误。同样先来案例:

C:\Users\>python
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import maths
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'maths'
>>>

在这个例子中,我想导入一个外部的 math 库,但我打成maths也就是说它实际上是不存在的。因此发生了没有此模块的 ModuleNotFoundError 错误。现在让我们来修复它。

>>> import math
>>> math.sqrt(9) # 返回9的平方根
3.0
>>>

我们修了数学计算的模块的引用。因此我们就可以继续做后边方法引用了。

AttributeError

AttributeError表示属性错误。一般是某个声明的对象没有此属性,但却被引用进而引发的错误。

>>> import math
>>> math.PI
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'math' has no attribute 'PI'
>>>

如你所见,我又犯了一个错误!我尝试从数学模块调用pi函数,而不是pi。因此会引发一个AttributeError错误,这意味着该函数在模块中不存在。我们将PI改成pi来修正它。

>>> import math
>>> math.pi
3.141592653589793
>>>

现在,我们从math模块中正确使用属性,因此我们得到圆周率的结果。

KeyError

KeyError表示关键词错误。

C:\Users>python
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> users = {'name':'Asab', 'age':250, 'country':'Finland'}
>>> users['name']
'Asab'
>>> users['conty']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'conty'
>>>

可以看到,在通过key获取字典的时候,我拼错了关键词。因此出现了关键词使用错误。程序出错,我们就必须修复它。

>>> users = {'name':'Asab', 'age':250, 'country':'Finland'}
>>> users['conty']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'conty'
>>> users['country']
'Finland'
>>>

我们通过调试修复了KeyError错误,进而我们程序可以正常运行了。

TypeError

TypeError表示类型错误。请先回顾下我们之前都学了哪些类型。如果这些乱用会出现一些什么情况呢?

>>> 4 + '3'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>

在上面的例子中,出现了TypeError错误,因为我们不能将字符串与数字进行相加。第一个解决方案是将字符串转换为int或float。另一种解决方案是将数字转换为字符串,但结果是字符串的连接结果会变成’43’,这不是我们想要的逻辑结果。因此让我们选择第一种方法修复这个错误。

>>> 4 + int(3)
7
>>> 4 + float('3')
7.0
>>>

错误被消除,我们得到了我们期望的结果。

ImportError

ImportError表示导入或引入错误。

C:\Users>python
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from math import power
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'power' from 'math' (unknown location)
>>>

因为在数学模块中没有名为 power 的函数,所以它引起了一个 ImportError错误。通过手册查询或者打印内置函数,可以看到正确函数应该是 pow。让我们来纠正一下:

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
>>> from math import pow
>>> pow(2,3)
8.0
>>>
>>>

ValueError

ValueError 值错误

>>> int('12a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12a'
>>>

在这个例子中,我们不能将一个带有字符的字符串转成数字,否则它就抛出一个值转换错误。

ZeroDivisionError

ZeroDivisionError 分母为零错误。在数学里我们知道如果一个数字除以0是不允许的。程序里也一样它会报错。

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>>

一个数不能被0除,所以上边例子给出了 ZeroDivisionError 错误。

至此,我们介绍了一些常见的错误类型,如果你想了解更多的。请查看python官方有关错误类型这部分的文档。如果你能熟练掌握错误的类型由来,那你在遇到错误的时候就能很快根据提示修复程序。这将祝你成为一个更好的程序员。

🌕 你如此优秀。在通往伟大的路上已经走了一半的路程了。本次没有额外的作业,但如果上边的例子,你并没有亲自尝试,那么请你把他们当作练习完成错误见证和debug修复它们。Y

💻 第15天练习

  1. 打开python交互式shell并练习本节中介绍的所有示例。

🎉 CONGRATULATIONS ! 🎉

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

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

相关文章

Linux编辑器——Vim详解

目录 ⭐前言 ⭐vim的基本概念 ⭐vim的基本操作 ⭐vim命令模式命令集 ⭐vim末行模式命令集 ⭐简单vim配置 ⭐配置文件的位置 ⭐常用配置选项 ⭐前言 vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容…

课程大纲:图像处理中的矩阵计算

课程名称&#xff1a;《图像处理中的矩阵计算》 课程简介&#xff1a; 图像处理中的矩阵计算是图像分析与处理的核心部分。本课程旨在教授学员如何应用线性代数中的矩阵计算&#xff0c;以实现各种图像处理技术。我们将通过强调实际应用和实践活动来确保学员能够理解和掌握这些…

代码随想录算法训练营第三六天 | 无重叠区间、划分字母区间、合并区间

目录 无重叠区间划分字母区间合并区间 LeetCode 435. 无重叠区间 LeetCode 763.划分字母区间 LeetCode 56. 合并区间 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠…

vue3 之 商城项目—会员中心

整体功能梳理 1️⃣个人中心—个人信息和猜你喜欢数据渲染 2️⃣我的订单—各种状态下的订单列表展示 路由配置&#xff08;三级路由配置&#xff09; 准备模版member/index.vue <script setup> </script><template><div class"container">…

深度学习图像算法工程师--面试准备(1)

1 请问人工神经网络中为什么 ReLU 要好过于 tanh 和 Sigmoid function&#xff1f; 采⽤Sigmoid 等函数&#xff0c;算激活函数时&#xff08;指数运算&#xff09;&#xff0c;计算量⼤&#xff0c;反向传播求误差梯度时&#xff0c;求导涉及除法和指数运算&#xff0c;计算量…

《VitePress 简易速速上手小册》第2章:Markdown 与页面创建(2024 最新版)

文章目录 2.1 Markdown 基础及扩展2.1.1 基础知识点解析2.1.2 重点案例&#xff1a;技术博客2.1.3 拓展案例 1&#xff1a;食谱分享2.1.4 拓展案例 2&#xff1a;个人旅行日记 2.2 页面结构与布局设计2.2.1 基础知识点解析2.2.2 重点案例&#xff1a;公司官网2.2.3 拓展案例 1&…

软件测试方法_边界值分析法

目录&#xff1a; ①边界值分析法的介绍和概念 ②边界值分析法的原理和思想 ③单缺陷假设和多缺陷假设 ④边界值测试数据类型 ⑤内部边界值分析 ⑥各类边界值测试介绍 ⑦基于边界值分析方法选择测试用例的原则 ⑧边界值分析法的实例分析 1、边界值分析法的介绍和概念 …

力扣94 二叉树的中序遍历 (Java版本) 递归、非递归

文章目录 题目描述递归解法非递归解法 题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(7)特征构造

特征分析之后&#xff0c;就是特征构造。 特征构造第一步 特征构造往往要进行数据的归一化。 在本案例中&#xff0c;我们将所有的数据&#xff0c;将所有特征区间调整为0~1之间。 如上图。 那么&#xff0c;为什么要进行归一化&#xff0c;又如何将数据&#xff0c;调整为…

【安卓基础1】初识Android

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职。 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &#xff08;他们的视频后面一部分没再更新&#xff0c;看看前面…

【力扣白嫖日记】1873.计算特殊奖金

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1873.计算特殊奖金 表&#xff1a;Employees 列名类型employee_idintnamevarcharsalaryint employee_id 是…

LeetCode 450.删除二叉搜索树中的节点和669.修建二叉搜索树思路对比 及heap-use-after-free问题解决

题目描述 450.删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;…

代码控制写入excel文件

1、引言 在工作和学习中&#xff0c;我们经常使用到excel表格&#xff0c;有时候表格中的数据很多&#xff0c;此时我们就希望能够通过程序去控制某些表格数据的生成和修改&#xff0c;从而达到简化操作&#xff0c;缩减工作量的目的&#xff0c;这里就来简单实现一下对excel表…

【办公技巧】如何压缩为rar格式文件?

压缩包格式是我们生活工作中常用到的文件格式&#xff0c;那么如何得到一个rar格式的压缩文件&#xff1f;或者说如何将文件压缩成rar格式而不是zip格式呢&#xff1f;今天我们来了解一下如何压缩为rar格式文件。 首先&#xff0c;想要压缩文件&#xff0c;我们需要压缩软件&a…

【C/C++】实现Reactor高并发服务器 完整版

代码结构 文件介绍 InetAddress.h InetAddress类 ip和端口设置 Socket.h Socket类 设置fd Epoll.h epollfd 管理类 Channel.h Channel类 管理epoll以及对应回调函数实现 EventLoop.h EventLoop事件循环类 TcpServer.h 服务器类 tcpepoll.cpp 主函数 InetAddress.h #if…

uniapp项目准备工作

1.封装请求 export const baseUrl function getHeaders () {let token uni.getStorageSync(token)let header {"access-token":token,// X-Requested-With: XMLHttpRequest,Content-Type: application/json; charsetUTF-8}return header } function reLogin(){/…

【Label Studio运行报错】ModuleNotFoundError: No module named ‘google.rpc‘

报错截图&#xff1a; 解决方法&#xff1a; 新建虚拟环境&#xff0c;安装google相关包 pip install google-cloud-core google-cloud-storage把虚拟环境中site-packages下google文件夹拷贝到当前环境的对应位置下。去官网下载最新的sqlite3&#xff0c;复制到AppData\Loca…

adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】

因为电脑上级路由器装了小飞机&#xff0c;导致本机电脑ps等adobe的系列软件出现了 This non-genuine Adobe app will be disabled soon&#xff0c;烦人的狠&#xff0c;之前有写过一篇通过更改host的教程&#xff0c;现在已经失效了&#xff0c;今天为大家分享一个用软件来屏…

【嵌入式学习】IO进程线程day02.20

一、思维导图 二、习题 #include <myhead.h> int main(int argc, const char *argv[]) {FILE *fpNULL;FILE *fqNULL;pid_t pidfork();if(pid>0){//在父进程中打开复制文件if((fpfopen("./text.txt","r"))NULL){perror("fopen error");…

职业资格高级执法考试试题及答案,分享几个实用搜题和学习工具 #知识分享#微信

作为当代大学生&#xff0c;我们常常面临着繁重的学业压力和众多的学习任务。在这个信息爆炸的时代&#xff0c;如何高效地进行搜题和学习成了我们迫切需要解决的问题。幸运的是&#xff0c;随着科技的不断进步&#xff0c;我们拥有了许多方便、实用的日常搜题和学习软件。 1.…