Python常见BUG类型

2020-12-23 15:29:09 浏览数 (3945)

很多小伙伴,在初学习 Python 的过程中,遇见 BUG 时便手忙脚乱,不知如何是好,今天小编在这给大家总结了一些常见的 BUG 类型及其应对措施,希望小伙伴们认真阅读做好笔记呢。


错误类型 1:语法错误

i = 1 

while True :

    i += 1

    if i == 100 :

        return

报错:

SyntaxError: 'return' outside function

从代码中不难看出这位小伙伴是想执行一个循环体,当 i 的值等于 100 时停止计算并返回,而 return 不能够再方法以外使用。

解决方法:

i = 1 

while True :

    i += 1

    if i == 100 :

        break


错误类型 2:类型错误

 name = '老王'

 age = 50

 print('我是' + name + ',年龄' + age)

报错:

TypeError: must be str, not int

从代码中可以看出该为小伙伴是想将名字和年龄做一个组合输出,但在进行 + 拼接时,必须使用字符串,而年龄却是 int 类型。

解决办法:将 int 类型数据转成字符串。

name = '老王'

age = 50

print('我是' + name + ',年龄' + str(age))


错误类型 3:语法错误

name = '老王'

if name = '老王':

    print('Hello')

报错:

SyntaxError: invalid syntax

此处看似是在判断 name 是否为'小王'如果是则输出  'Hello',但却忽略了 '=' 符号是赋值符,'==' 才是比较符。

解决方法:

name = '老王'

if name == '老王':

    print('Hello')


错误类型 4:缩进错误

  name = '老王'

  for index in range(10):

  if name == '老王': 

     print('Hello')

else: 

    print('No body')

报错:

IndentationError: unindent does not match any outer indentation level

该类型报错较为常见,也比较不应该,主要还是由于粗心大意而忽视了语法的缩进符。

解决方法:使用 4 个空格代表缩进,或摁 tab 实现自动缩进。

name = '老王'

for index in range(10):

  if name == '老王': 

    print('Hello')

  else: 

    print('No body')


错误类型 5:索引错误

 text = 'hello world'

 print(text[11])

报错: 

IndexError: string index out of range

该类型的错误为所需提取的字符串超出了范围,记住字符串下标是从 0 开始计数的,而不是从 1 开始,另外字符串内的空格也是计数的。


错误类型 6:值错误

text = 'Hello World'

result = text.index('你好')

print(result)

报错: 

ValueError: substring not found

该类型错误是用户想要在字符串中查找不存在的字符串,查找字符串时先确认原字符串是否有我们需要的子字符串。


错误类型 7:索引错误

list1 = ['迪迦','赛文','塞罗','艾斯']

print(list1[4])

报错:

IndexError: list index out of range

该用户是想取出列表中的最后一个位置的信息,但取值超出了列表范围或列表不存在,记住列表的下标也是从 0 开始计数的。

解决办法:

list1 = ['迪迦','赛文','塞罗','艾斯']

#方法一

print(list1[3])

#方法二

print(list1[-1])


错误类型 8:属性错误

tp1 = ('to', 'be', 'or', 'not', 'to', 'be')

tp1.remove('to')

报错:

AttributeError: 'tuple' object has no attribute 'remove'

可以看出用户是想将元组的 'to' 信息删除,然而却忽略了元组没有 remove 方法。

解决方法:将元组转换成列表后进行删除操作。

tp1 = ('to', 'be', 'or', 'not', 'to', 'be')

list1 = list(tp1)

list1.remove('to')


错误类型 9:键错误

 dic1 = {

    'name':'老王',

    'age':50,

    'friend':['孙子','孔子','老子','迪迦']

}

print(dic1['height'])

报错:

KeyError: 'height'

key 键错误:没有指定的键值 'height' ,从用户定义的字典不难看出里面并无 'height' 这个键,而用户却像从中取没有的值,不难免报错了。


错误类型 10:类型错误

dic1 = { 

    'name':'老王',

    'age':50,

    'friend':['孙子','孔子','老子','迪迦']

}

dic1.pop()

报错:

TypeError: pop expected at least 1 arguments, got 0

使用 pop() 方法时至少需要传入一个参数,但用户并没有进行传参操作。


以上便是小编为大家总结出来的几种常见 BUG 类型,特别对于初学者来说,应该好好琢磨下,如何根据报错的类型,分析修改完善自己所写的代码,孰能生巧,只要肯用心,这些 BUG 都不足挂齿!!!

好课推荐:Python3 入门Python3 进阶