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中使用异步Socket编程性能测试
Jun 25 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
Python with用法:自动关闭文件进程
Jul 10 Python
Python3 A*寻路算法实现方式
Dec 24 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
Python中有几个关键字
Jun 04 Python
Python 中Operator模块的使用
Jan 30 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 Python
pd.drop_duplicates删除重复行的方法实现
Jun 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
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
纯Javascript实现ping功能的方法
2015/03/20 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
Python中文件操作简明介绍
2015/04/13 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
养殖行业的创业计划书
2014/01/05 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
奉献演讲稿范文
2014/05/21 职场文书
高三励志标语
2014/06/05 职场文书
普通党员个人整改措施
2014/10/27 职场文书
大学生在校表现评语
2014/12/31 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
遗愿清单观后感
2015/06/09 职场文书