当前位置: 首页 > news >正文

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.lryc.cn/news/486741.html

相关文章:

  • k8s上部署redis高可用集群
  • C++的类和对象
  • 自动驾驶系列—深入解析自动驾驶车联网技术及其应用场景
  • 机器学习(1)
  • 深入理解 Redis跳跃表 Skip List 原理|图解查询、插入
  • Halcon HImage 与 Qt QImage 的相互转换(修订版)
  • 【Golang】——Gin 框架中的模板渲染详解
  • CSS:导航栏三角箭头
  • onlyoffice Command service(命令服务)使用示例
  • QSS 设置bug
  • 交换排序——快速排序
  • nodejs入门(1):nodejs的前后端分离
  • 笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像
  • gorm框架
  • 免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制
  • 【ASR技术】WhisperX安装使用
  • 【计算机网络】协议定制
  • 【SQL】mysql常用命令
  • 阿里云引领智算集群网络架构的新一轮变革
  • 几何合理的分片段感知的3D分子生成 FragGen - 评测
  • Python爬虫下载新闻,Flask展现新闻(2)
  • 监控易监测对象及指标之:全面监控华为FusionInsight服务
  • SQL面试题——蚂蚁SQL面试题 会话分组问题
  • nfs服务器--RHCE
  • React--》如何高效管理前端环境变量:开发与生产环境配置详解
  • Javascript高级—函数柯西化
  • Sql进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?
  • linux之调度管理(5)-实时调度器
  • mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释
  • nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录