Python 小高考篇(6)常见错误及排查

目录

  • TypeError
    • 拼接字符串和数字
      • 错误示范
      • 正确示范
    • 数字、字符串当成函数
      • 错误示范
    • 给函数传入未被定义过的参数
      • 错误示范
    • 传入的参数个数不正确
      • 错误示范
    • 字符串相乘
      • 错误示范
      • 正确示范
    • 量取整数的长度
      • 错误示范
      • 正确示范
    • 格式化字符串时占位符个数不正确
      • 错误示范
    • 给复数比较大小
      • 错误示范
      • 正确示范
  • ValueError
    • 将含有非数字的字符串转换为整数
      • 错误示范
    • 拆分时数据个数和变量个数不同
      • 正确示范
  • NameError
    • 读取未被定义过的变量
      • 错误示范
      • 正确示范
  • AttributeError
    • 拆分一个数字
      • 错误示范
  • ZeroDivisionError
    • 除数为0
      • 错误示范
    • 正确示范
  • ModuleNotFoundError
    • 导入不存在的模块
      • 错误示范
  • SyntaxError
    • 位置参数后面放了关键词参数后面
      • 错误示范
      • 正确示范
    • 混用单双引号
      • 错误示范
      • 正确示范
    • 缩进错误
      • 错误示范
    • 没有if直接elif或else
      • 错误示范
    • 无效字符
      • 错误示范
    • while、if、elif、else、for里面缺少内容
      • 错误示范
      • 正确示范
    • while、if、elif、else、for语句后面没有冒号
      • 错误示范
  • 结尾


本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

TypeError

拼接字符串和数字

input()后获得的值是str类型的,因此常常需要将其转化为相应的类型(如整数)再进行操作。

错误示范

>>> "2" + 1
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

正确示范

字符串和数字是无法相加的。
修改:要么把字符串转化为整数再相加,要么将整数转化为字符串后拼接。

>>> int("2") + 1
3
>>> "2" + str(1)
'21'

数字、字符串当成函数

数字和字符串它不是一个函数,所以它不能被调用。

错误示范

>>> num = 12
>>> num()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> string = "string"
>>> string()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

给函数传入未被定义过的参数

提前搞清楚函数有哪些参数,以及参数个数,否则很容易犯这类错。

错误示范

>>> print("Hello",set="")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'set' is an invalid keyword argument for print()
>>> int('12',dec=16)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'dec' is an invalid keyword argument for int()
>>> def hi(arg):
...     print(arg,"hi")
...
>>> hi(arg1=114)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: hi() got an unexpected keyword argument 'arg1'

传入的参数个数不正确

提前搞清楚函数有哪些参数,以及参数个数,否则很容易犯这类错。

错误示范

>>> def hello():
...     print("Hello")
...
>>> hello(1)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: hello() takes 0 positional arguments but 1 was given

字符串相乘

字符串直接无法相乘。只有字符串和整数相乘,或者整数相乘。这种错误常常是因为在输入之后没有将输入的内容转化成整数导致的。

错误示范

>>> "12" * "12"
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'

正确示范

将需要的数据转换为整数即可。

>>> 12 * 12
144
>>> 12 * "12"
'121212121212121212121212'
>>> "12" * 12
'121212121212121212121212'

量取整数的长度

整数类型无法通过len()函数获取其位数。

错误示范

>>> len(123)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

正确示范

只需将需要计算位数的数字变成字符串,然后再用len()函数度量其长度。

>>> len(str(123))
3

格式化字符串时占位符个数不正确

格式化字符串时占位符个数不正确,即可引发次错误。

错误示范

>>> "%s" % (5,6)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

给复数比较大小

先说一下,再python中,因为某些原因,虚数单位不是i,而是j。而再数学中,我们学过虚数只能判断其是否相等,而不能判断谁大谁小。

错误示范

>>> 1+1j > 2+3j
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'complex' and 'complex'

正确示范

只能判断复数是否相等。

>>> 1+1j == 2+3j
False
>>> 2+4j == 2+4j
True

ValueError

将含有非数字的字符串转换为整数

当字符串内包含非数字时,其无法转化为整数。

错误示范

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

拆分时数据个数和变量个数不同

当一个链表或元组中的数据个数和分配给的变量个数不同时,将会出现此错误。经常是在a,b = input().split()之后出现错误,因为没有搞清楚到底有几个数据。

>>> a,b = (1,2,3)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> a,b,c = (1,2)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)

正确示范

使链表或元组中的数据个数和分配给的变量个数相匹配即可。

>>> a,b,c = (1,2,3)

NameError

读取未被定义过的变量

若在一个变量定义之前就去读其它,则会出现此错误。

错误示范

>>> print(a)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

正确示范

>>> a = 114514
>>> print(a)
114514

AttributeError

拆分一个数字

只有str可以拆分,数字无法被split。

错误示范

>>> num = 12
>>> num.split()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'split'

ZeroDivisionError

除数为0

在数学上我们也学过,除数作为0是无意义的。所以在python中这种计算会导致错误。经常实在for i in range时候,由于没有考虑i的范围而导致的错误。

错误示范

>>> 5 / 0
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> for i in range(5):
...     print(5 / i)
...
Traceback (most recent call last):File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero

正确示范

注意不要出现除数为0。

>>> for i in range(1,5):
...     print(5 / i)
...
5.0
2.5
1.6666666666666667
1.25

ModuleNotFoundError

导入不存在的模块

如果导入模块时模块不存在,则可能模块名搞错了。看看有没有拼写错误,比如把“math”打成“nath”之类。

错误示范

>>> import unknownmodule
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'unknownmodule'

SyntaxError

位置参数后面放了关键词参数后面

有的函数我们喜欢用关键词参数传入数据,有的则喜欢用位置参数。先看一眼这两种参数到底是什么:

def func(arg1,arg2,arg3):print(arg1,arg2,arg3)
func(1,2,3)
func(arg1=1,arg2=2,arg3=3)
func(arg2=2,arg1=1,arg3=3)
func(1,2,arg3=3)

第3行就是用的位置参数传入的数据,像这样python会按照参数的位置一一对应给到各个变量(准确来说应该叫形参):1赋值给arg1,2赋值给arg2,3赋值给arg3。第4、5行用的就是关键词参数,好处就是参数位置即使是乱的,依然可以把对应内容给到正确的形参(尤其是第5行)。第6行则是混合用法,前面按照位置匹配给对应的形参(1赋值给arg1,2赋值给arg2),后面按照关键词将3赋值给arg3。但是,位置参数必须放在前面,关键词参数必须放在后面,否则会引起混乱,python就不知道某个数据该赋值给哪个形参,就像下面的例子。

错误示范

>>> print(1,2,3,sep="",4)File "<stdin>", line 1print(1,2,3,sep="",4)^
SyntaxError: positional argument follows keyword argument

正确示范

把关键词参数放到后面。

>>> print(1,2,3,4,sep="")
1234

混用单双引号

单、双引号不能混用,否则会引起错乱。

错误示范

>>> 'string"File "<stdin>", line 1'string"^
SyntaxError: unterminated string literal (detected at line 1)
>>> "string'File "<stdin>", line 1"string'^
SyntaxError: unterminated string literal (detected at line 1)

正确示范

单双引号必须匹配。

>>> "string"
'string'
>>> 'string'
'string'

缩进错误

缩进的空格个数不能乱。

错误示范

for i in range(10):print(i) #前面4个空格print(i) #前面5个空格

抛出错误:

 Traceback (most recent call last):File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>start(fakepyfile,mainpyfile)File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in startexec(open(mainpyfile).read(),  __main__.__dict__)File "<string>", line 3print(i) #前面5个空格
IndentationError: unexpected indent

没有if直接elif或else

在没有if打头的情况下,一般不可以出现elseelif

错误示范

>>> a = 0
>>> elif a == 0:File "<stdin>", line 1elif a == 0:^^^^
SyntaxError: invalid syntax

无效字符

当代码中出现一些乱七八糟的字符时,就会出现这种错误。

错误示范

>>> 5!File "<stdin>", line 15!^
SyntaxError: invalid syntax

while、if、elif、else、for里面缺少内容

whileifelifelsefor里面必须要有一些语句。如果还没想好要写什么,可以先用pass留空,如正确示范那样。

错误示范

>>> while True:
...File "<stdin>", line 2^
IndentationError: expected an indented block after 'while' statement on line 1

正确示范

可以用pass留空。

>>> while True:
...     pass
...

while、if、elif、else、for语句后面没有冒号

whileifelifelsefor后面需要有冒号。

错误示范

>>> while TrueFile "<stdin>", line 1while True^
SyntaxError: expected ':'

结尾

好啦,今天就讲到这里了,记得一键三连哦!(˃ ⌑ ˂ഃ )

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

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

相关文章

网络工程实验一:静态路由的配置

#实验仅供参考&#xff0c;勿直接粘贴复制&#xff0c;用以学习交流# 1、实验目的&#xff1a; 熟悉eNSP网络仿真工具平台。 掌握静态路由配置方法。 能够配置路由器接口地址。 2、实验内容&#xff1a; 2.1、安装对应的软件&#xff1a; &#xff08;1&#xff09;Virtual …

基于java的宠物用品交易平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

华为VPN技术

1.启动设备 2.配置IP地址 [FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip add 192.168.1.254 24 [FW1-GigabitEthernet1/0/0]int g1/0/1 [FW1-GigabitEthernet1/0/1]ip add 100.1.1.1 24 [FW1-GigabitEthernet1/0/1]service-manage ping permit [FW2]int g1/0/0 [FW2-Gi…

鸿蒙进阶篇-数组常用方法(一)

大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天咱们来学习一下数组的常用方法。 数组在编程中是非常常见的数据类型&#xff0c;毕竟需要用到的场合太多了&#xff0c;所以我们今天来使劲学习一下常用方法&#xff0c;在这里也没法一一列全&#xff0c;但是大家也可以根…

整数唯一分解定理

整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。 一、整数唯一分解定理 整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是数论中的一个重…

对Pod做一个详细了解

文章目录 01创建一个pod02删除pod03镜像拉取策略04pod的标签05pod资源限制方法06pod的重启策略 07pod中运行多个容器08对pod内的容器执行命令09 验证多个pod中多个容器网络共享10 pod的创建流程和调度的约束方式pod的声明周期介绍pod 的健康检查健康检查的方式probe的探测方式案…

LinkedHashMap实现LRU

LRU 环境&#xff1a;JDK11 最近接触LRU(Least Recently Used)&#xff0c;即最近最少使用&#xff0c;也称淘汰算法&#xff0c;在JDK中LinkedHashMap有相关实现 LRU的LinkedHashMap实现 LinkedHashMap继承HashMap。所以内存的存储结构和HashMap一样&#xff0c;但是LinkedH…

基于rk356x u-boot版本功能分析及编译相关(三)Makefile分析

🎏技术驱动源于热爱,祝各位学有所成。 文章目录 一、Makefile简要概述二、简要流程图三、Makefile文件具体分析大家好哈,这次因工作比较忙,文章更新拖的有些久了。哈哈,话不多说,咱们接着上次继续说u-boot的Makefile。 一、Makefile简要概述 一般要了解u-boot源码的编译…

shell(1)脚本创建执行与变量使用

shell&#xff08;1&#xff09;脚本创建执行与变量使用 声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&…

第5章总体设计-5.4 硬件可行性分析

5.4 硬件可行性分析 5.4.1 硬件方案评估1. 框式产品硬件可行性分析&#xff08;1&#xff09;机框设计可行性。&#xff08;2&#xff09;单板设计可行性。&#xff08;3&#xff09;核心功能器件选型。&#xff08;4&#xff09;数据流。 2. 盒式产品硬件可行性分析3. 终端产品…

TOIS24|推荐公平性的反事实解释

论文&#xff1a;https://arxiv.org/pdf/2307.04386 代码&#xff1a;https://anonymous.4open.science/r/CFairER-anony/. 关键词&#xff1a;可解释推荐;公平;反事实的解释;强化学习 1 动机 现有推荐系统存在的公平性问题&#xff0c;例如性别歧视和种族偏见等&#xff0c;…

week 3 - Assembly Language

Important Instructions and Syntax 此内容是以MASM编写的&#xff0c;你将使用Visual C/C内联汇编来编程&#xff0c;因此数据元素的声明有所不同&#xff0c;但概念和指令集&#xff08;instruction sets)相同。 一、General-Purpose Registers 寄存器是CPU内的命名存储单元…

6.C操作符详解,深入探索操作符与字符串处理

C操作符详解&#xff0c;深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾&#xff1a; C语言是什么&#xff1f;编程界的‘常青树’&#xff0c;它的辉煌你不可不知VS 2022 社区版C语言的安装教程&#xff0c;不要再卡在下载0B/s啦C语言入门&#xff1a;解锁基础…

校园导航系统

关于数据结构的一个整理&#xff1a; 1、链式有序表的合并 2、栈 3、队列 4、二叉树、哈夫曼报文 5、图论 6、十大排序 7、校园导航系统 文章目录 校园导航系统演示示例代码示例1、弧结点和顶点节点2、Map节点3、用户 校园导航系统 采用C语言涉及了数据库相关的操作&am…

食品进出库库存管理发货开单软件下载 佳易王食品进出库管理系统操作教程

一、概述 【软件资源下载在文章最后】 食品进出库库存管理发货开单软件下载 食品进出库管理系统操作教程 商品进出库管理软件是一款操作简便的进出库管理软件&#xff0c;管理入库&#xff0c;出库&#xff0c;库存&#xff0c;同时打印发货单。 二、软件操作教程 第一步&a…

C++和OpenGL实现3D游戏编程【连载18】——加载OBJ三维模型

1、本节课要实现的内容 以前我们加载过立方体木箱,立方体的顶点数据都是在程序运行时临时定义的。但后期如果模型数量增多,模型逐步复杂,我们就必须加载外部模型文件。这节课我们就先了解一下加载OBJ模型文件的方法,这样可以让编程和设计进行分工合作,极大丰富我们游戏效…

二刷代码随想录第四天

24. 两两交换链表中的节点 设置个虚拟头节点画图理清楚节点之间的指向关系 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new ListNode(0);dummyHead->next head;ListNode* cur dummyHead;while (cur->next ! nullptr &&…

【Linux】proc 文件系统详解

/proc 文件系统是 Linux 内核提供的一种特殊的文件系统&#xff0c;它主要用于显示内核和进程的信息。/proc 文件系统是一个虚拟文件系统&#xff0c;这意味着它并不占用实际的磁盘空间&#xff0c;而是由内核动态生成的内容。通过 /proc 文件系统&#xff0c;用户可以读取系统…

Linux文件系统

Linux文件系统 Linux 文件系统是 Linux 操作系统中用于存储和组织文件的结构。以下是一些关键概念和常见的 Linux 文件系统类型&#xff1a; 关键概念 文件系统层次结构&#xff1a;Linux 使用统一的文件系统层次结构&#xff0c;所有文件和目录都从根目录 / 开始。 目录结构…

[1.15.X-1.18.X]Herobrine-吾王HIM插件

Herobrine 这款插件99%自定义!为你的服务器增加一个吓人的HIM&#xff0c;该插件是一个非玩家角色&#xff0c;由 Minecraft 的粉丝创建。从来没有真正成为 Minecraft 游戏的一部分&#xff0c;这个故事是他在 Minecraft 世界里出没&#xff0c;Mojang 通过开玩笑地将“移除的 …