Python遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,则程序就会用所谓的回溯(Traceback,一种错误信息)来终止执行。
异常举例:
open('python.txt','r')
try:
<语句>
except <异常类型1>[, 异常参数名1]:
<异常处理代码1>
except <异常类型2>[, 异常参数名2]:
<异常处理代码2>
else:
<没有异常时候的处理代码>
finally:
<不管是否有异常,最终执行的代码块>
try语句按照如下方式工作:
1.首先,执行try子句(在关键字try和关键字except之间的语句)
2.如果没有异常发生,忽略except子句,try子句执行后结束。
3.如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
4.如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
5.一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。
6.多只有一个分支会被执行。 处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
7.一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组.
try:
print(aaa) #如果这句话有错,就会捕获到异常
except ValueError: #NameError 异常
print('变量未定义') #对NameError异常的处理
except NameError:
print('变量未定义')
try:
print(aaa) #如果这句话有错,就会捕获到异常
except NameError as e:
print(e)#打印具体的异常信息
try:
# print(aaa)
files = open('aaa.txt','r',encoding= 'utf-8') #如果这句话有错,就会捕获到异常
except (NameError,FileNotFoundError) as e:
print(e)#打印具体的异常信息
try:
files = open('aaa.txt','r',encoding= 'utf-8') #如果这句话有错,就会捕获到异常
except Exception as e: #有异常时执行
print(e)
else:
print('没有异常时执行')
try:
print('打开文件!')
files = open('aaa.txt','w',encoding='utf-8')
try:
files.write('测试一下行不行')
except:
print('写入失败')
else:
print('写入成功')
finally: #不管有没有异常都要执行的代码块
print('关闭文件')
files.close()
except Exception as e:
print(e)
import time
print(time.altzone)#回格林威治西部的夏令时地区的偏移秒数
#接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"的24个字符的字符串。
print(time.asctime()) #返回可读形式的当前时间
print(time.asctime((2017,12,12,12,12,12,3,340,1)))#返回指定的时间
print(time.time())#返回当前时间的时间戳(1970.1.1,00:00开始到现在总共的秒数)
print(time.gmtime()) #返回时间元祖 返回的是格林威治时间元祖,不是我们本地的时间
print(time.localtime())#返回时间元祖 返回的是本地的时间元祖
输出结果:
-32400
Fri Jan 3 14:22:17 2020
Thu Dec 12 12:12:12 2017
1578032537.7465622
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=6, tm_min=22, tm_sec=17, tm_wday=4, tm_yday=3, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=14, tm_min=22, tm_sec=17, tm_wday=4, tm_yday=3, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=14, tm_min=22, tm_sec=17, tm_wday=4, tm_yday=3, tm_isdst=0)
import time
#获取当前时间戳
times = time.time()
formatTime = time.localtime(times)
print(formatTime)
#接收以时间元组,并返回指定格式可读字符串表示的当地时间,格式由fmt决定。
print(time.strftime(u'%Y-%m-%d %H:%M:%S',formatTime))
输出:
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=14, tm_min=24, tm_sec=48, tm_wday=4, tm_yday=3, tm_isdst=0)
2020-01-03 14:24:48
import time
times = '2017-12-12 12:12:12'
#转换为时间元祖
formatTime = time.strptime(times,'%Y-%m-%d %H:%M:%S')
print(formatTime)
#将时间元祖转换为时间戳i mktime
print(time.mktime(formatTime))
输出:
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=12, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=1, tm_yday=346, tm_isdst=-1)
1513051932.0
import time
for i in range(1,2):
print('让子弹飞一会')
time.sleep(2)
print('子弹在飞')
time.sleep(2)
print('子弹到了')
输出:
让子弹飞一会
子弹在飞
子弹到了
编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获TypeError 异常,并打印一条友好的错误消息。
try:
num1 = int(input('请输入第一个数字:'))
num2 = int(input('请输入第二个数字:'))
except ValueError:
print('请输入一个整数')
else:
print(num1+num2)
代码:
import time
times="2017-10-10 23:40:00"
formatTime=time.strptime(times,'%Y-%m-%d %H:%M:%S')#将字符串时间转换为时间元祖
print(formatTime)
print(time.mktime(formatTime))#将时间元组转换为时间错
结果:
time.struct_time(tm_year=2017, tm_mon=10, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=1, tm_yday=283, tm_isdst=-1)
1507650000.0
代码:
import time
times="2017-10-10 23:40:00"
formatTime=time.strptime(times,'%Y-%m-%d %H:%M:%S')#将字符串时间转换为时间元祖
print(time.strftime('%Y/%m/%d %H:%M:%S',formatTime))
结果:
2017/10/10 23:40:00
代码:
import time
times="2017-10-10 23:40:00"
now = time.time()
formatTime=time.localtime(now)
print(time.strftime('%Y-%m-%d %H:%M:%S',formatTime))
结果:
2020-01-03 16:54:32
代码:
import time
times="2017-10-10 23:40:00"
threeDayAgo=time.time()-60*60*24*3
formatTime=time.localtime(threeDayAgo)
print(time.strftime('%Y-%m-%d %H:%M:%S',formatTime))
结果:
2019-12-31 16:54:54