python08篇 发邮件和异常处理

一、发邮件

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中的代码')
原文地址:https://www.cnblogs.com/lhy-qingqiu/p/13649195.html