【Python 常用脚本及命令系列 2.2 -- Python 脚本输入参数处理与异常处理】

什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
以下为简单的try....except...else的语法:

try:
	<语句>        #运行别的代码
except <名字><语句>        #如果在try部份引发了'name'异常
except <名字><数据>:
	<语句>        #如果引发了'name'异常,获得附加的数据
else:
	<语句>        #如果没有异常发生

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

以上程序输出结果:

$ python test.py 
内容写入文件成功
$ cat testfile       # 查看写入的内容
这是一个测试文件,用于测试异常!!

下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

在执行代码前为了测试方便,我们可以先去掉 testfile 文件的写权限,命令如下:

chmod -w testfile

再执行以上代码:

$ python test.py 
Error: 没有找到文件或读取文件失败

try-finally 语句

在Python中,你可以使用try/finally语句来确保某段代码无论是否引发异常都会执行。这在你需要确保某些资源正确释放,如文件或网络连接等情况下非常有用。

以下是一个基本的例子:

try: 
	f = open("test.txt", "r") 
	content = f.read() 
finally: f.close()

在这个例子中,无论读取文件的过程中是否发生异常,f.close()语句都会被执行,以确保文件资源被正确释放。

如果你需要处理可能引发的异常,你可以在try/finally语句中加入except子句:

try: 
	f = open("test.txt", "r") 
	content = f.read() 
except FileNotFoundError: 
	print("File not found.") 
finally: f.close()

在这个例子中,如果文件不存在,FileNotFoundError异常将会被捕获并打印出错误信息,而finally子句保证了无论如何都会执行f.close(),确保文件资源被正确释放。

用户自定义异常

在Python中,你可以通过定义一个继承自Exception的新类来创建自定义异常。自定义异常可以用于在特定情况下引发和捕获自定义错误。

以下是一个自定义异常的示例:

class MyCustomError(Exception): 
	pass def do_something(): 
		raise MyCustomError("This is a custom error.") 
		try: 
			do_something() 
		except MyCustomError as e: 
			print(e)

在这个例子中,我们定义了一个名为MyCustomError的自定义异常类,它继承自Exception。在do_something()函数中,我们使用raise语句引发了一个MyCustomError异常。在try/except语句中,我们捕获了该异常,并打印出错误消息。

python 输出参数判断及处理

在 Python 中,命令行参数通过 sys.argv 列表提供,其中 sys.argv[0] 是脚本名称,其后的元素是传入的参数。你可以检查 sys.argv 的长度来确定传入了多少参数,并根据需要对这些参数进行检查。

下面是一个简单的 Python 脚本例子,它检查输入参数的个数,并对输入参数 1、2、3 进行检查:

import sys 

# 检查我们是否得到了足够的参数(排除了脚本名称本身,所以加 1) 
if len(sys.argv) < 4: 
	print("错误:未提供足够的参数。") 
	print("用法: python script.py 参数1 参数2 参数3") 
	sys.exit(1) # 非正常退出 

# 参数已提供,可以进行处理 
input_arg1 = sys.argv[1] # 输入参数1 
input_arg2 = sys.argv[2] # 输入参数2 
input_arg3 = sys.argv[3] # 输入参数3 

# 对参数进行检查的示例 
# 这里你可以加入任何具体的逻辑来检查参数值 
try: 
	# 假设我们希望输入参数1是一个整数 
	arg1_int = int(input_arg1) 
	print(f"输入参数1是一个有效的整数: {arg1_int}") 
except ValueError: 
	print(f"错误:输入参数1不是一个有效的整数: {input_arg1}") sys.exit(1) 

# 假设我们希望输入参数2是一个浮点数 
try: 
	arg2_float = float(input_arg2) 
	print(f"输入参数2是一个有效的浮点数: {arg2_float}") 
except ValueError: 
	print(f"错误:输入参数2不是一个有效的浮点数: {input_arg2}") 
	sys.exit(1) 

# 假设我们希望输入参数3是一个非空字符串 
if input_arg3: 
	print(f"输入参数3是一个非空字符串: {input_arg3}") 
else: 
	print("错误:输入参数3是一个空字符串") 
	sys.exit(1) 

# 如果脚本到这里,说明所有参数都已成功验证 
print("所有输入参数都已成功验证。") 

使用此脚本时,请确保将 script.py 替换为你的脚本文件名。在命令行中运行它时,需要传入三个参数。如果没有提供足够的参数,或任何一个参数验证失败,脚本将打印一条错误消息并非正常退出。

例如,你可以像这样运行脚本:

python script.py 123 45.67 "Hello World" 

这会检查第一个参数是否为整数,第二个参数是否为浮点数,第三个参数是否为非空字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值