Python中遇到的小问题及解决方法汇总


Posted in Python onJanuary 11, 2017

本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习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))

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

Python中遇到的小问题及解决方法汇总

三、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等.

Python中遇到的小问题及解决方法汇总

四、正则匹配

这个东西有点高深了,最初的想法是使用正则来转变接收到的数据的格式,问过达哥之后原本recv到的数据在encode之后的类型是"str",之前自己的想法是把数据转成list格式,之后提取之类的方便,但"str"类型也可以直接利用偏移来进行分析也可以,直接用"str[]"就可以搞定,因为这个过程中不需要可视化的打印出来,需要打印的是分析之后的结果,所以正则先用不到。

不过还是要把觉得不错的链接放一下:

Python入门篇之正则表达式

Python 匹配任意字符(包括换行符)的正则表达式写法

五、格式化字符串

temp = '123456'
 print("word:%s" %temp)
 
 output: word:123456

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

f.write ("Block Type: %s \n"
  "Block count: %s \n"
  %(block_type, block_count))
  return block_type, block_count

六、文件读写操作

这个问题别人的博客写的很好很详细了

f = open(r'C:\Movie\test2.txt','w')

直接打开一个文件,如果文件不存在则创建文件,只能只用写命令

f = open(r'C:\Movie\test2.txt')

打开一个文件,只能只用读命令

f.read([size])

size为读取的长度,以byte为单位,如果不写则读取全部内容

f.readline([size])

读一行,如果定义了size,有可能返回的只是一行的一部分。每读取一次,文件操作符向下移动一行。

f.readlines([size])

把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

关于open模式,参数不同达到的效果也是不同的,比如我需要的是在一个日志文件中不断的追加新的东西而不是每次都直接覆盖掉,所以我用到了"a+"

关于open模式的参数:

  1. w     以写方式打开
  2. a     以追加模式打开
  3. r+     以读写模式打开
  4. w+     以读写模式打开
  5. a+     以读写模式打开 (我用到了这个模式,读写模式不断追加新的东西)
  6. rb     以二进制读模式打开
  7. wb     以二进制写模式打开
  8. ab     以二进制追加模式打开
  9. rb+    以二进制读写模式打开11 wb+    以二进制读写模式打开12 ab+    以二进制读写模式打开

还有一些操作的区别,我当时用到的问题是f.readline,每次都是读文件的一行,没有把全部的内容都读出来,所以区别还是很明显,要区分清楚.

写操作的用法和区别:

f.write(“str”)

把str写到文件中,write()方法不会在str后加上一个换行符

f.writelines(seq)

把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

f.close()

关闭文件。在读命令或者写命令结束时,需要用关闭。如果文件关闭后依然操作,会抛出ValueError: I/O operation on closed file

f.tell()

返回文件操作标记的当前位置,以文件的开头为起点

fp.next()

返回下一行内容,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

fp.seek(offset[,whence])

将文件操作标记为移动到offset位置。

七、遇到的报错情况

自己不想要定义太多的函数,个人感觉是想要将不同功能的函数进行分类,因此我尝试用到了类,知道自己这么做可能是想法上就有些不对的,但是想要瞎试试看看效果,所以结果就是报错了.

如图,这是别人遇到的方法,和我的是一样的,我没有定义静态的函数,所以每次使用之前都需要进行实例化才能调用.

Python中遇到的小问题及解决方法汇总

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
使用python实现扫描端口示例
Mar 29 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Django 自定义分页器的实现代码
Nov 24 Python
python 消除 futureWarning问题的解决
Dec 25 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
django日志默认打印request请求信息的方法示例
May 17 Python
python生成xml时规定dtd实例方法
Sep 21 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
python使用正则表达式匹配字符串开头并打印示例
Jan 11 #Python
SQLite3中文编码 Python的实现
Jan 11 #Python
利用python实现数据分析
Jan 11 #Python
使用python调用zxing库生成二维码图片详解
Jan 10 #Python
利用Python生成文件md5校验值函数的方法
Jan 10 #Python
python中执行shell的两种方法总结
Jan 10 #Python
Python用list或dict字段模式读取文件的方法
Jan 10 #Python
You might like
isset和empty的区别
2007/01/15 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
浅析Python编写函数装饰器
2016/03/18 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
python如何调用百度识图api
2020/09/29 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
小学数学国培感言
2014/03/10 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
会计主管岗位职责
2015/04/02 职场文书
朋友离别感言
2015/08/04 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技