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

devtools/2024/11/19 2:32:16/

目录

  • 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.ppmy.cn/devtools/135092.html

相关文章

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 实践 我们需要先选这一个模板&#xff0c;具体流程参考…

macOS系统下使用SQLark连接达梦数据库

目录 下载 SQLark 客户端 安装 SQLark 客户端 SQLark用户界面 使用SQLark连接达梦数据库 1. 选择达梦数据库 2. 输入连接信息 3. 测试连接 4. 创建连接 5. 验证连接成功 作为一名数据库开发者&#xff0c;在macOS系统上找到一款支持达梦数据库的数据库开发和管理工具&…

力扣第 55 题 跳跃游戏

力扣第 55 题 跳跃游戏&#xff08;Jump Game&#xff09;。题目要求判断一个非负整数数组中&#xff0c;是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…

使用 Go 实现将任何网页转化为 PDF

在许多应用场景中&#xff0c;可能需要将网页内容转化为 PDF 格式&#xff0c;比如保存网页内容、生成报告、或者创建网站截图。使用 Go 编程语言&#xff0c;结合一些现有的库&#xff0c;可以非常方便地实现这一功能。本文将带你一步一步地介绍如何使用 Go 语言将任何网页转换…

⚙️ 如何调整重试策略以适应不同的业务需求?

调整 Kafka 生产者和消费者的重试策略以适应不同的业务需求&#xff0c;需要根据业务的特性和容错要求来进行细致的配置。以下是一些关键的调整策略&#xff1a; 业务重要性&#xff1a; 对于关键业务消息&#xff0c;可以增加重试次数&#xff0c;并设置较长的重试间隔&#x…

【C++】哈希表的实现详解

哈希表的实现详解 一、哈希常识1.1、哈希概念1.2、哈希冲突1.3、哈希函数&#xff08;直接定执 除留余数&#xff09;1.4、哈希冲突解决闭散列&#xff08;线性探测 二次探测&#xff09;开散列 二、闭散列哈希表的模拟实现2.1、框架2.2、哈希节点状态的类2.3、哈希表的扩容2…

音频采样数据格式

音频信号在模拟到数字转换时&#xff0c;会涉及到多个关键参数&#xff0c;如采样率、位深度、通道数等。下面是常见的音频采样数据格式及其相关概念&#xff1a; 1. 采样率 (Sample Rate) 采样率指的是每秒钟对音频信号进行采样的次数&#xff0c;单位为赫兹 (Hz)。常见的值…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…