Statement¶
约 652 个字 76 行代码 1 张图片 预计阅读时间 3 分钟
assignment 赋值语句 ¶
1.evaluate all expressions to the right of =
from left to right
2.bind all names to the left of =
to the resulting values in the current frame
#attention the unique syntax of Python
a,b = b+a,a
if¶
if x<=2760:
y = 0.538 * x
elif x<=4800:
y = 0.588 * x
else:
y = 0.838 * x
- 在
if
之后的行,如果保持相同的缩进,就是这个if
的一部分,是当表达式的结果是True
,即关系成立的时候,要执行的内容
boolean operators¶
优先级规则 not>and>or
while¶
冒号,True 大写
while True:
x = int(input())
if x == -1:
break
cnt += 1
s += x
for¶
python 中有for - else
结构,不要使用
所谓 else 指的是循环正常结束后要执行的代码,
即如果是 bresk 终止循环的情况。else 下方缩进的代码将不执行。
x = int(input())
for k in range(2,x):
if x%k==0:
print(f'{x} is compsite')
break
else:
print(f'{x} is prime')
异常 ¶
try:
语句块1
except 异常类型1:
语句块2
except 异常类型2:
语句块3
…
except 异常类型N:
语句块N+1
except:
语句块N+2
else:
语句块N+3
finally:
语句块N+4
except Exception as n: ##万能捕捉器
- 在
except 异常类型
子句中找对应的异常类型,如果找到的话,执行后面的语句块 - 如果找不到,则执行
except
后面的语句块 N+2 - 如果程序正常执行没有发生异常,则继续执行
else
后的语句块 N+3 - 无论异常是否发生,最后都执行
finally
后面语句块 N+4
- raise 抛出异常
raise Exception
raise Exception('load overload')
标准异常 ¶
异常名称 | 描述 |
---|---|
SystemExit | 解释器请求退出 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除 ( 或取模 ) 零 ( 所有数据类型 ) |
KeyboardInterrupt | 用户中断执行 ( 通常是输入 ^C) |
ImportError | 导入模块 / 对象失败 |
IndexError | 序列中没有此索引 (index) |
RuntimeError | 一般的运行时错误 |
AttributeError | 对象没有这个属性 |
IOError | 输入 / 输出操作失败 |
OSError | 操作系统错误 |
KeyError | 映射中没有这个键 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
##一次捕捉多个异常
try:
x,y = map(int, input('输入两个整数:').split())
print(x/y)
except (ZeroDivisionError, TypeError, NameError):
print('输入错误')
异常变量 ¶
- 有时需要除了异常类型以外其他的异常细节:
except Exception as name
再抛异常 ¶
- 如果需要在
except
子句中再次抛出刚捕捉到的异常:
def calc(expr):
try:
return eval(expr)
except ZeroDivisionError:
print('divided by zero is illegal!')
raise
自定义异常 ¶
- 根据自己的目的可以自己定义异常类型
- 异常类需要从
Exception
类继承
class AgeOutofRange(Exception):
pass
Testing¶
断言 ¶
- 通常写在本文件或者同文件夹下的
_test.py
- 函数是写出来给别的程序员用的
- 检查函数接口的数据错误
- 函数入口应该对传入的参数值做检查
assert <条件>, <失败提示文字>
def divide(a, b):
assert b!=0, 'Divided by zero'
return a/b
Doctest¶
placing simple tests directly in docstring of a function
def add(a, b):
"""
返回两个数的和。
示例:
>>> add(2, 3)
5
>>> add(-1, 5)
4
"""
return a + b
import doctest
if __name__ == '__main__':
doctest.testmod()
from doctest import run_docstring_examples
run_docstring_examples(sum_naturals, globals(), True)
python3 -m doctest -v <source_file>
Doctest 的优点是它与文档紧密结合,测试用例直接嵌入在文档字符串中,使得测试更加直观和易于维护。它还可以作为文档的一部分,提供实例和用法示例。
然而,Doctest 适用于简单的测试场景,对于复杂的测试需求,如测试边界条件、异常处理等,通常需要使用其他测试框架,如 unittest
或 pytest
。