柿子饼同学 发表于 2021-3-4 14:58:16

断言的作用?

书上说assert是用来让程序在不符合条件时报错,那为什么不用try - expect或者if-else呢,assert可以被他们代替吗?{:10_245:}
还有就是检查点时什么?
(我是新手,大神讲解请举栗子哈,谢谢)

Daniel_Zhang 发表于 2021-3-4 15:08:32

个人的理解就是,在猜大小那个游戏中

比如说 guess = input('猜一猜')

可以用 assert 判断用户输入是否是 一个数字

如果是就不会触发 assert

不是的话就会触发,并且返回自己设置好的错误提示

https://blog.csdn.net/hao5335156/article/details/81170661

逃兵 发表于 2021-3-4 15:21:59

断言assert

可以用
if not expression:
    raise AssertionError
替代

它最大的作用就是由你主动生成错误,终止程序。

在你做一个项目的时候

在上一个结果会影响下一个结果的情况下,你可以在上一个结果产出时通过设置断言来判断程序还有没有继续运行的价值

demo

import random
def fun1():
    return random.randint(0,10)


a = fun1()
assert a
b = fun1()

c = b/a

print(c)

Traceback (most recent call last):
File "C:\Users\admin\Desktop\test.py", line 9, in <module>
    assert a
AssertionError
>>> a
0

这个程序先生成分母,再生成分子

如果生成的分母是0的话,没有必要再去生成分子了,我们主动将程序报错

柿子饼同学 发表于 2021-3-4 15:57:17

逃兵 发表于 2021-3-4 15:21
断言assert

可以用


那可不可以理解为:一旦报错,程序就不再运行
然后就比较好调试{:10_257:}

逃兵 发表于 2021-3-4 15:59:53

柿子饼同学 发表于 2021-3-4 15:57
那可不可以理解为:一旦报错,程序就不再运行
然后就比较好调试

柿子饼同学 发表于 2021-3-4 16:01:36

柿子饼同学 发表于 2021-3-4 15:57
那可不可以理解为:一旦报错,程序就不再运行
然后就比较好调试

那如果是这样,让他直接报错不是更好吗,比如当文件存在时创建同名文件,不需要写断言,它自己就报错了

柿子饼同学 发表于 2021-3-4 16:20:41

逃兵 发表于 2021-3-4 15:59


那如果是这样,让他直接报错不是更好吗,比如当文件存在时创建同名文件,不需要写断言,它自己就报错了{:10_269:}

安澜cvv 发表于 2021-3-4 16:21:33

assert的语法格式:
assert expression
   它的等价语句为:
if not expression:
    raise AssertionError


1、assert语句用来声明某个条件是真的。
2、如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。
3、当assert语句失败的时候,会引发一AssertionError。

   有时候与其让程序在晚些时候崩溃,不如在错误条件出现时直接让它崩溃,如果需要在程序中的某个条件一定为真的时候才能让程序正常工作的话,assert语句就有用了,它可以在程序中置入检查点。

>>>age = 1
>>>assert 0<age<10
>>>age = -1
>>>assert 0<age<10
  当执行最后一句的时候,assert 0<age<10 失败,所以触发AssertionError,显示结果如下:


Traceback (most recent call last):
File "<ipython-input-4-5ad9ee6f8005>", line 1, in <module>
    assert 0<age<10

————————————————
原文链接:https://blog.csdn.net/loster_Li/article/details/52840734https://blog.csdn.net/loster_Li/article/details/52840734

柿子饼同学 发表于 2021-3-4 16:30:23

谢谢谢谢

逃兵 发表于 2021-3-4 17:07:13

柿子饼同学 发表于 2021-3-4 16:20
那如果是这样,让他直接报错不是更好吗,比如当文件存在时创建同名文件,不需要写断言,它自己就报错了{: ...

你说的这种情况确实不需要写断言,因为程序自己会识别报错

而断言是你自己在程序中所设定的错误,你自己用来调试的

如果你写的代码没有任何问题以后也不会出现任何问题,断言一点作用都没有。当你相信代码能够正确平稳运行的时候。或许你忘记了一些特殊发生的情况,在这种情况下,额外的运行时检查将帮助你尽可能早地捕获错误,而不是运行到最后才发现问题。

以你说的例子延展一下

假设你现在有一份文件a,里面记载了重要的信息

现在老板需要你提交一份文件a(与上面的文件同名),需要写入不同的内容

如果你不小心以with open(a,'w') as f:的方式写入,程序不会报错,但是源文件内容就会丢失

这个时候加一句断言,在发生事故之前,你的行为将被终止

柿子饼同学 发表于 2021-3-4 17:33:39

逃兵 发表于 2021-3-4 17:07
你说的这种情况确实不需要写断言,因为程序自己会识别报错

而断言是你自己在程序中所设定的错误,你自 ...

那具体该怎么写呢{:10_297:}

逃兵 发表于 2021-3-4 17:45:51

柿子饼同学 发表于 2021-3-4 17:33
那具体该怎么写呢

import os

file_list=os.listdir()

filename='机密文件.txt'

assert filename not in file_list

with open(filename,'w') as f:
    f.write('这是一个机密文件')
   

柿子饼同学 发表于 2021-3-4 18:07:09

逃兵 发表于 2021-3-4 17:45


谢谢,学到了{:10_254:}
页: [1]
查看完整版本: 断言的作用?