python异常处理和模块

python的异常处理

  • 异常
    即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:

  • 例如下面的例子,执行程序的时候提示输入一个数字,如果输入的是数字,程序正常退出,如果不是数字,抛出错误,再继续输入

while True:
        try:
            x = int(input("Please enter a number: "))
            break
        except ValueError:
            print("That was no valid number.  Try again   ")

#输出
Please enter a number: kk
Oops!  That was no valid number.  Try again   
Please enter a number: 88

Process finished with exit code 0        

try语句按照如下方式工作;
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

  • 抛出异常
    Python 使用 raise 语句抛出一个指定的异常。例如:
>> raise NameError('HiThere')
Traceback (most recent call last):
  File "F:\sublime\2243.py", line 1, in <module>
    raise NameError("HiThere")
NameError: HiThere
  • raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。


>>> try:
        raise NameError('HiThere')
    except NameError:
        print('An exception flew by!')
        raise

An exception flew by!
Traceback (most recent call last):
  File "<stdin>", line 2, in ?
NameError: HiThere

time模块

  • 时间
    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
    Python 提供了一个 time 模块可以用于格式化时间。
    时间间隔是以秒为单位的浮点小数。
    每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
    Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:
#!/usr/bin/python3

import time;  # 引入time模块

ticks = time.time()
print ("当前时间戳为:", ticks)

#输出
当前时间戳为: 1524491497.901433
[Finished in 0.2s]
  • 获取本地时间
localtime = time.localtime(time.time())
print ("本地时间为 :", localtime)

输出
本地时间为 : time.struct_time(tm_year=2018, tm_mon=4, tm_mday=23, tm_hour=21, tm_min=52, tm_sec=53, tm_wday=0, tm_yday=113, tm_isdst=0)
  • 获取格式化的时间(看起来更直观)
localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

#输出
本地时间为 : Mon Apr 23 21:54:26 2018
  • 格式化日期
    我们可以使用 time 模块的 strftime 方法来格式化日期,
# 格式化成2018-04-23 21:56:39形式
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# 格式化成Mon Apr 23 21:56:39 2018形式
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))

#输出
2018-04-23 21:57:18
Mon Apr 23 21:57:18 2018


  • time.sleep格式

time.sleep(secs)
推迟调用线程的运行,secs指秒数。
#!/usr/bin/python3
import time

print ("Start : %s" % time.ctime())
time.sleep( 5 )
print ("End : %s" % time.ctime())

#输出
Start : Mon Apr 23 21:59:28 2018
End : Mon Apr 23 21:59:33 2018


  • time.strptime

time.strptime(str,fmt=’%a %b %d %H:%M:%S %Y’)
根据fmt的格式把一个时间字符串解析为时间元组。
import time
struct_time = time.strptime("23 Apr 18", "%d %b %y")
print ("返回元组: ", struct_time)

#输出
返回元组:  time.struct_time(tm_year=2018, tm_mon=4, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=113, tm_isdst=-1)

subprocess 模块

  • subprocess.call 和 subprocess.check_call

执行命令,返回状态码。
两者唯一的区别在于返回值。执行成功,都返回 0;执行失败,check_call 将raise出来一个CalledProcessError。

import subprocess
subprocess.call(['ls', '-l'])
subprocess.call(['ls -l'], shell=True)
注意shell=True 的用法,支持命令以字符串的形式传入。
  • subprocess.getoutput(cmd)

以字符串的形式返回执行结果,错误或者正确都会返回,命令本身不会报错

import subprocess
a = subprocess.getoutput('ls /Users/wangxiansheng/desktops')
print(a)
print(type(a))

# 输出
ls: /Users/wangxiansheng/desktops: No such file or directory
<class 'str'>
  • subprocess.getstatusoutput(cmd)

返回包含执行结果状态码和输出信息的元组。

扫描二维码关注公众号,回复: 767112 查看本文章
import subprocess
a = subprocess.getstatusoutput('ls /Users/wangxiansheng/desktops')
print(a)
print(type(a))

#输出
(1, 'ls: /Users/wangxiansheng/desktops: No such file or directory')
<class 'tuple'>

猜你喜欢

转载自blog.csdn.net/wushan1992/article/details/80056964