本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习python。
一、Python的异常处理
因为想到自己不断尝试写小程序的话会用到抛出异常信息来判断哪里出现了问题:
usage: raise [Exception [, args [, trackback]]]
上面是Python的raise的用法,下面是自己用这个方法实现异常的抛出方法:
def check_args(args):
if not args.host:
msg = 'Args missing! One of the following args should be specified n'
'--host 192.168.1.1 n'
'-f TargetFile n'
raise Exception(msg)
#参考别人的代码模式,我这样写来抛出异常.
二、list转str
这个问题是因为自己的无知吧:
命令行传入的host(即ip地址)是list形式,想要通过list转为str的格式之后来进行socket.connect() , 报错:
自己想象的姿势:
client.connect((str(args.host), args.p))
正确的姿势:
client.connect((''.join(args.host), args.p))
上图证明自己的愚蠢(可能下次还会犯同样的错):
三、argparse函数
出发的动机是因为自己写的小程序要通过命令行的形式传参并执行命令.
用自己的简单小实例来显示函数的具体用法吧:
def parse_args():
parser = argparse.ArgumentParser(prog = 'hello',
formatter_class = argparse.RawTextHelpFormatter,
description = '* A tiny toy for fun *n'
'By ST(www.********)',
usage = 'hellPLC.py [options]')
parser.add_argument('-host', metavar = 'HOST [HOST2 HOST3 ...]', type = str,
default = '', nargs = '*',
help = 'Scan the host form command line')
代码很简单,一看就懂大概函数是什么样子,重点是add_argument的参数,当你传入的cmd参数是这种方式的话:
我们可以看到,需要在-p之后跟一个int型的参数才可以,还有另外一种形式.
parser.add_argument('-p', metavar = 'PORT', type = int,
default = '')
这种方式不需要跟参数,只需要类似于”python -h“这种形式就可以执行并得到想要的结果:
这里就需要对这个函数的各个参数的功能有个基本的了解,这样才能用起来舒服.
parser.add_argument('-b', default= False, dest='b', action='store_true',
help = 'Get the base info')
下图就是我们可以跟的参数,自己的问题就是区分清楚action和dest这两个参数,还有default,type等.