Python小问题汇总

现在的时间适合写点最近的小总结,这中间涉及到python/git等问题,我就从python先说起吧.

一、Python

1. Python的异常处理

因为想到自己不断尝试写小程序的话会用到抛出异常信息来判断哪里出现了问题:

usage: raise [Exception [, args [, trackback]]]

上面是Python的raise的用法,下面是自己用这个方法实现异常的抛出方法:

1 def check_args(args):
2     if not args.host:
3         msg = 'Args missing! One of the following args should be specified 
' 
4               '--host 192.168.1.1 
' 
5               '-f TargetFile 
'
6         raise Exception(msg)
7 
8 #参考别人的代码模式,我这样写来抛出异常.

2. list转str

这个问题是因为自己的无知吧:

命令行传入的host(即ip地址)是list形式,想要通过list转为str的格式之后来进行socket.connect(),报错:

自己想象的姿势:
client.connect((str(args.host), args.p))

正确的姿势:
client.connect((''.join(args.host), args.p))

上图证明自己的愚蠢(可能下次还会犯同样的错):

3. argparse函数

 出发的动机是因为自己写的小程序要通过命令行的形式传参并执行命令.

 用自己的简单小实例来显示函数的具体用法吧:

1 def parse_args():
2     parser = argparse.ArgumentParser(prog = 'hello',
3                                      formatter_class = argparse.RawTextHelpFormatter,
4                                      description = '* A tiny toy for fun     *
'
5                                      'By ST(www.********)',
6                                      usage = 'hellPLC.py [options]')
7     parser.add_argument('-host', metavar = 'HOST [HOST2 HOST3 ...]', type = str,
8                         default = '', nargs = '*',
9                         help = 'Scan the host form command line')

代码很简单,一看就懂大概函数是什么样子,重点是add_argument的参数,当你传入的cmd参数是这种方式的话:

我们可以看到,需要在-p之后跟一个int型的参数才可以,还有另外一种形式.

parser.add_argument('-p', metavar = 'PORT', type = int,
                        default = '')

这种方式不需要跟参数,只需要类似于"python -h"这种形式就可以执行并得到想要的结果:

这里就需要对这个函数的各个参数的功能有个基本的了解,这样才能用起来舒服.

1 parser.add_argument('-b', default= False, dest='b', action='store_true',
2                         help = 'Get the base info')

下图就是我们可以跟的参数,自己的问题就是区分清楚action和dest这两个参数,还有default,type等.

4. 正则匹配

这个东西有点高深了,最初的想法是使用正则来转变接收到的数据的格式,问过达哥之后原本recv到的数据在encode之后的类型是"str",之前自己的想法是把数据转成list格式,之后提取之类的方便,但"str"类型也可以直接利用偏移来进行分析也可以,直接用"str[]"就可以搞定,因为这个过程中不需要可视化的打印出来,需要打印的是分析之后的结果.所以正则先用不到.
不过还是要把搜资料的时候觉得不错的链接放一下:
 
一篇是百度文库的:
一篇是博客园的,里面有那张个人感觉很经典的图片:

5. 格式化字符串

1 temp = '123456'
2 print("word:%s" %temp)
3 
4 output: word:123456

很简单就可以搞定,但是当时想要返回取多个返回值,一下子蒙住不知道怎么搞了,呵呵了~

1 f.write ("Block Type: %s 
"
2          "Block count: %s 
"
3          %(block_type, block_count))
4          return block_type, block_count

 代码很容易看,就是这样,搞定了.

先到这里,都是小问题,做个记录

原文地址:https://www.cnblogs.com/stone-dan-dan/p/6269141.html