条件判断语句
if
elif
else
a = 50
if a > 100:
print("a 超过阈值")
elif a == 50:
print("a 只有阈值的一半")
else:
print("a 小于阈值")
循环语句
for
遍历一个可迭代对象(暂时理解为list), 会影响相同作用域当中的变量
l = [1, 2, 3, 4, 5, 6]
e = 0
for e in l:
print(e)
print(f"final e value: {e}")
获取索引值和值
l = [1, 2, 3, 4, 5, 6]
for i, e in enumerate(l):
print(f"index: {i}, value: {e}")
while
循环
一定要有逻辑判断语句来退出while
循环
while 判断语句:
表达式
while True:
判断语句
表达式
跳出循环
break
停止当前循环continue
跳过当前的执行逻辑, 立即执行下一个循环语句单元;pass
跳过当前条件判断中的执行语句, 后续语句继续执行;异常
程序遇到严重错误时, 会终止程序的运行并抛出异常
def my_sub(a, b):
return a / b
my_sub(1, 0)
捕获异常
try:
表达式
except [Exception] as e:
表达式
finnaly:
表达式
def my_sub(a, b):
try:
return a / b
except ZeroDivisionError:
# print(e)
print("分母不可为0")
return None
finally:
print("function my_sub end")
my_sub(1, 0)
Exception
所有异常的基类, 所有的异常都是Exception的子类
处理异常颗粒度要细一点, 尽量不要捕获基类Exception, 尤其是数据处理的时候.
常见的异常
IndexError
索引值超过了列表长度
>>> l = [1]
>>> l[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
KeyError
找不到Key
>>> d = {"a": 1}
>>> d["b"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
ValueError
传入的参数错误
>>> int('a1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a1'
TypeError
类型错误, 常见于运算
>>> 1 + '2'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
SyntaxError
语法报错, 检查自己的语法有没有写错
IndentationError
缩进错误
如何处理异常
处理
抛出新异常
def my_sub(a, b):
try:
return a / b
except ZeroDivisionError:
print("分母不可为0")
raise Exception("params error")
finally:
print("function my_sub end")
重新抛出
def my_sub(a, b):
try:
return a / b
except ZeroDivisionError:
print("分母不可为0")
raise ZeroDivisionError
finally:
print("function my_sub end")
忽略(不推荐)
pass
用来指示当前处理语句没有正式写完, 尽量不要忽略异常, 否则代码的健壮度会很差, 造成不可预知的bug.
自定义异常
class ParamsError(Exception):
pass
def my_sub(a, b):
try:
return a / b
except ZeroDivisionError:
raise ParamsError("分母不可以为0")
finally:
print("function my_sub end")