参赛话题:学习笔记

Bug

多加练习,掌握基础知识,从而少些甚至不写Bug

  • Bug的常见类型
  • 粗心导致的语法错误 SyntaxError
    常见粗心:
  • 漏掉末尾冒号,如if语句循环语句else子句
  • 缩进错误,该缩进的没缩进,不该缩进的缩进
  • 英文符号写成中文符号,比如引号冒号括号
  • 字符串拼接的时候,把字符串和数字拼在一起
  • 没有定义变量,比如说while的循环条件的变量
  • == 比较运算符和 = 赋值运算符的混用
age = input('请输入你的年龄')
print(type(age))
# if age >= 18:  # TypeError: '>=' not supported between instances of 'str' and 'int'

if int(age) >= 18:
    print('成年人做事要负法律责任')

i = 0
while i < 10:
    print(i)
    i += 1
lst = [11, 22, 33, 44]  # IndexError: list index out of range  列表的索引是从0开始
# print(lst[4])
# print(lst(3))  # TypeError: 'list' object is not callable
print(lst[3])

lst = ['A', 'B', 'C']
# lst = append('A', 'B', 'C')  # NameError: name 'append' is not defined
# append()方法是列表的方法
# lst.append('A', 'B', 'C')  # TypeError: list.append() takes exactly one argument (3 given)
# append()方法每次只能添加一个元素
print(lst)
  • 知识点不熟练导致的错误
  1. 索引越界问题 IndexError
  2. append()方法的使用不熟练
  • 思路不清导致的问题的解决办法
  1. 使用print()函数进行打印输出
  2. 使用 # 暂时注释部分代码(通常是问题代码)

Tips:

  1. · 间隔号的输入,搜狗输入法中文直接打jgh即可
  2. 选中文件,直接快速Ctrl+CV对代码进行复制
  3. 选中代码段,Tab键,将整段代码缩进
  • 被动掉坑所导致的异常
    程序代码逻辑没有错,只是因为用户错误操作或者一些例外情况而导致的程序崩溃
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a / b
print('结果为:', result)

# ValueError: invalid literal for int() with base 10: 'q'
# ZeroDivisionError: division by zero

解决方案:Python提供了异常处理机制,可以在异常出现时及时捕获,然后内部消化,让程序继续运行(try: except:)

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
    print('结果为:', result)
except ZeroDivisionError:  # 遇到异常就执行该捕获语句
    print('呆瓜,除数不能为0哦')
print('程序结束')

# ValueError: invalid literal for int() with base 10: 'q'
# ZeroDivisionError: division by zero

多个except (catch) 结构:捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加 BaseException(最大的)

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
    print('结果为:', result)
except ZeroDivisionError:  # 遇到异常就执行该捕获语句
    print('呆瓜,除数不能为0哦')
except ValueError:
    print('只能输入数字串')
print('程序结束')

# ValueError: invalid literal for int() with base 10: 'q'
# ZeroDivisionError: division by zero

Python的异常处理机制

  • try…except…else结构
  • 如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
try:
    n1 = int(input('请输入一个整数'))
    n2 = int(input('请输入另一个整数'))
    result = n1 / n2
except BaseException as e:
    print('出错啦')
    print(e)
else:
    print('结果为:', result)
  • try…except…else…finally结构
  • finally块无论是否发生异常都会执行,常用来释放try块中申请的资源
try:
    n1 = int(input('请输入一个整数'))
    n2 = int(input('请输入另一个整数'))
    result = n1 / n2
except BaseException as e:
    print('出错啦')
    print(e)
else:
    print('结果为', result)
finally:
    print('无论是否产生异常,总会被执行的代码')
print('程序结束')

常用于文件处理、文件关闭以及数据库的连接
except 和 else 是两个分支

Python中的常见异常类型

异常类型

描述

1

ZeroDivisionError

除(或取模)0(所有数据类型)

2

IndexError

序列中没有此索引(index)

3

KeyError

映射中没有这个键

4

NameError

未声明/初始化对象(没有属性)

5

SyntaxError

Python语法错误

6

ValueError

传入无效参数

# 数学运算异常
# print(10 / 0)  # ZeroDivisionError: division by zero

# 索引
lst = [11, 22, 33, 44]
# print(lst[4])  # 出现异常后程序就停止,所以要先把上面的异常注释掉才能看见下面的异常
# IndexError: list index out of range

# 字典
dic = {'name': 'zhangsan', 'age': 23}
# print(dic['gender'])  # KeyError: 'gender'  字典当中没有 'gender' 键

# 未声明
# print(num)  # NameError: name 'num' is not defined. Did you mean: 'sum'?

# 语法错误
# int a = 20  # SyntaxError: invalid syntax  Python当中变量是没有数据类型的 int a 是在给变量设置类型,所以出现语法错误

# 传入无效参数
a = int('hello')  # ValueError: invalid literal for int() with base 10: 'hello'     'hello'是一个字符串,是不能转成十进制整数的
  • traceback模块
  • 使用 traceback 模块打印异常信息
# print(10/0)
'''
异常信息
有可能之后存入文件,制作log日志
Traceback (most recent call last):
  File "E:\pythonProject\chap11\demo10.py", line 5, in <module>
    print(10/0)
ZeroDivisionError: division by zero
'''

import traceback  # 导入模块

try:
    print('---------------------------')
    print(1 / 0)
except:
    traceback.print_exc()

# --------------------- 的位置每一次运行总是变化,这涉及线程问题

PyCharm开发环境的调试

  • 断点
  • 左键点击设置与取消
  • 程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步判断
  • 进入调试视图
  • 进入调试视图的三种方式
  1. 单击工具栏上的虫子
  2. 右键单击编辑区:选择 debug “模块名"
  3. 快捷键: Shift + F9
断点调试
i = 1
while i <= 10:
    print(i)
    i += 1