一、发邮件
import yamail smtp = yamail.SMTP(host='smtp.qq.com', # 改成自己邮箱的服务器即可,其他的比如smtp.163.com user='651*****@qq.com', # 发送邮箱用的用户名 password='') # 如果是163、qq等免费邮箱的话需要授权码,自己公司的邮箱,一般都使用密码.授权码需要再邮箱的设置-帐户-POP3/SMTP服务(开启服务) smtp.send(to=['511****@qq.com'], # 发送给谁,如果是多少,就在list中添加多个 subject='请查收', # 邮件主题 cc=['285*****@qq.com'], # 抄送给谁,如果是多少,就在list中添加多个 contents='邮件正文', # 邮件正文 attachments=['笔记.txt']) # 附件,如果有多个附件,写list中 smtp.close()
二、异常以及异常处理
2.1 异常
运行期检测到的错误被称为异常。
大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:
>>> 10 * (1/0) # 0 不能作为除数,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: division by zero >>> 4 + spam*3 # spam 未定义,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'spam' is not defined >>> '2' + 2 # int 不能与 str 相加,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str
2.2 异常处理
try/except
异常捕捉可以使用 try/except 语句。
try 语句按照如下方式工作;
-
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
-
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
-
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
-
如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
else 子句将在 try 子句没有发生任何异常的时候执行。
try-finally 语句无论是否发生异常都将执行最后的代码。
import traceback try: '1' + 2 2 / 0 except TypeError as e: # e 具体的错误信息 print(e) print('出错了') except ZeroDivisionError as e: print(e) except IndexError : print('下标错误') except KeyError as e: print(e) except FileNotFoundError as e: print('文件找不到') except Exception as e: # Exception 是所有异常的基类,只要出现异常,都能捕捉,但不能确定是具体哪种异常 # traceback.print_exc() # 打印堆栈信息 print('自己加的', traceback.format_exc()) # 把堆栈信息写入到日志中用此方法 print('出异常了', e) else: print('没有出异常') # 不管出不出异常,都执行finally中的代码.实际场景使用:比如关闭文件,关闭数据库连接等等 finally: print('不管出不出异常,都执行finally中的代码')