Skip to content

Latest commit

 

History

History
239 lines (168 loc) · 5 KB

085-1795665-完善程序_try_except_参数列表_断点列表.sy.md

File metadata and controls

239 lines (168 loc) · 5 KB
show version enable_checker
step
1.0
true

列表 - 系统命令行参数

回忆

  • 上次研究了python文件运行时的系统参数
    • sys.argv
    • 通过sys.argv就可以接收从命令行来的参数了
    • 可以通过索引来获得第n个参数
    • 这就是索引(index)的作用

图片描述

  • 但是调用实际过程中
    • 参数可能给
    • 也可能没给
  • 这可怎么办呢?

原始程序

import sys
fruit = sys.argv[1]
amount = int(sys.argv[2])
if fruit == "apple":
    sum = amount * 1
    print("Sum of",amount, "apples are", sum)
elif fruit == "banana":
    sum = amount * 0.5
    print("Sum of",amount, "bananas are", sum)
else:
    print("There is no price of",fruit)
  • 参数没给够

图片描述

  • 发生了IndexError

处理

import sys
try:
    fruit = sys.argv[1]
    amount = int(sys.argv[2])
    if fruit == "apple":
        sum = amount * 1
        print("Sum of",amount, "apples are", sum)
    elif fruit == "banana":
        sum = amount * 0.5
        print("Sum of",amount, "bananas are", sum)
    else:
        print("There is no price of",fruit)
except IndexError:
    print("Program needs argument!")
    print("eg. python3 shopping apple 5")
  • 运行结果

图片描述

  • 这样就足够了吗?

老朋友

  • 在str转化为int时后
    • 有可能出现ValueError

图片描述

  • ValueError 是我们的老朋友了
    • 又该如何修改呢?

修改结果

import sys
try:
    fruit = sys.argv[1]
    amount = int(sys.argv[2])
    if fruit == "apple":
        sum = amount * 1
        print("Sum of",amount, "apples are", sum)
    elif fruit == "banana":
        sum = amount * 0.5
        print("Sum of",amount, "bananas are", sum)
    else:
        print("There is no price of",fruit)
except IndexError:
    print("Program needs argument!")
    print("eg. python3 shopping apple 5")
except ValueError:
    print("last arguement needs integer!")
    print("eg. python3 shopping apple 5")
  • 运行

图片描述

  • 确实解决了问题
  • 这个程序可以调试吗?

尝试调试

pdb3 shopping.py apple 5
  • 运行结果

图片描述

定义

  • 定义三个断点
    • 1 号断点在 第2行
    • 2 号断点在 第15行
    • 3 号断点在 第17行

图片描述

  • 这些断点是彼此什么关系呢?

断点列表

  • 其实我们调试的时候
    • 这些断点构成一个列表(list)

图片描述

  • mutable sequence

删除断点

  • clear命令
    • 可以删除 某个断点

图片描述

  • clear shopping.py:2
    • 删除 shopping.py 第2行 的 断点

图片描述

  • 1号断点 被删除
    • 还剩下 2、3 这两个断点

清除断点

  • clear 3
    • 删除 当前第3号 断点

图片描述

  • 删除了 3号断点
    • 只剩下 2号断点

全清空

  • clear
    • 清空 断点列表

图片描述

  • 所有断点 都清空了

重设断点

  • 把断点删除后
    • 在1、14、17行上
    • 重新设置断点

图片描述

  • 开始 调试
    • debug

continue

  • c 就是continue
    • 继续走到下一个断点

图片描述

  • 由于参数正确
    • 直接跳转到了结尾
  • 可以在运行的时候
    • 修改sys.argv吗?

尝试修改

  • 开始执行

图片描述

  • 把系统参数列表给清空了
    • 再continue会如何呢?😊

continue

  • 出现了IndexError
    • 因为sys.argv被清空了

图片描述

  • 进入了第14行
    • 处理 异常
    • 然后 程序退出
  • 退出了
    • 去总结吧

总结🤔

  • 这次完善了系统参数列表的处理
    • 处理了可能出现的
      • IndexError
      • ValueError

图片描述

  • 调试了程序
    • 理解到断点
      • 构成 一个断点列表
  • 在调试的过程中
    • 可以实时 对变量修改

图片描述

  • list(列表类)
    • 还有什么方法吗?🤔
  • 下次再说 👋