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

四、正则匹配

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

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

Python入门篇之正则表达式

https://www.jb51.net/article/56436.htm

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

https://www.jb51.net/article/20654.htm

五、格式化字符串

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模式的参数:

w 以写方式打开

a 以追加模式打开

r+ 以读写模式打开

w+ 以读写模式打开

a+ 以读写模式打开 (我用到了这个模式,读写模式不断追加新的东西)

rb 以二进制读模式打开

wb 以二进制写模式打开

ab 以二进制追加模式打开

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中遇到的小问题及解决方法汇总相关推荐

  1. 解决高分辨率看网页字体太小问题的一个方法

    有些笔记本电脑或LCD显示器的最佳分辨率大于1024x768,例如SXGA+的1400x1050,我们一般会在Windows的显示选项里设置使用大字体,以便更容易阅读.但是IE浏览器缺省是使用96DP ...

  2. python中变量的作用域有几种_Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  3. python字典和集合对象可以进行索引操作_Python中的字典跟集合整理笔记

    泛映射类型 映射类型:不仅仅是dict,标准库里的所有映射类型都是利用dict来实现的,因此它们有个共同的限制,即只有可散列的数据类型才能用做这些映射的键.(只有键有这个需求,值并不需要必须是可散列的 ...

  4. python new方法_Python中的__new__()方法的使用

    __new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known case ...

  5. python中plot实现即时数据动态显示方法_python中plot实现即时数据动态显示方法

    在Matlab使用Plot函数实现数据动态显示方法总结中介绍了两种实现即时数据动态显示的方法.考虑到使用python的人群日益增多,再加上本人最近想使用python动态显示即时的数据,网上方法很少,固 ...

  6. 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...

    一.理解类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在P ...

  7. python的super方法_Python中“super”是做什么的?

    有什么不同?SomeBaseClass.__init__(self) 意味着调用SomeBaseClass的__init__.而 super(Child, self).__init__() 意味着__ ...

  8. python数据类型有哪些、分别有什么用途_python中的数据类型有哪些

    python中的数据类型有9种,分别是1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期. 1.字符串 1.1.如何在Python中使用字符串 a.使用单引号(') 用单 ...

  9. python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些

    Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些 发布时间:2020-11-05 17:11:48 来源:亿速云 阅读:95 作者:Leah 本篇文章给大家分享的是有关P ...

最新文章

  1. 高频开关电源原理_程控开关电源的工作原理
  2. Spring Boot 操作 Redis 的各种实现
  3. Exchange 2016 證書無效如何處理?
  4. 2021年春季学期-信号与系统-第十三次作业参考答案-第九小题
  5. gVim 取消自动备份(Windows/Linux)
  6. 如何使用:before和:after伪元素?
  7. 不分大小写的Strstr
  8. python3环境搭建odoo_【环境配置】ubuntu16.04配置odoo13环境
  9. axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单
  10. [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法
  11. windows优化大师怎么用_软件不能用又卸载不掉怎么办——用Windows自家的卸载工具吧(dos级卸载)...
  12. GOOGLE本地搜索
  13. hackrf+portapack 组装上手体验记录
  14. 东芝 rc100 linux,东芝RC100 M.2 NVMe固态硬盘HMB特性解读
  15. 【Love2d从青铜到王者】第十一篇:Love2d之图像(Images)
  16. 计算机辅助英语教学mti,计算机辅助翻译介绍
  17. 复制神器Ditto使用方法详细说明
  18. cout, endl的使用
  19. html格式的字幕如何匹配电影,电影片尾字幕内容范本
  20. 测试用例评审的旁观记录

热门文章

  1. win10计算机休眠后无法唤醒,win10电脑休眠后无法唤醒的解决办法
  2. S2Snet:利用纳米孔进行低分子量RNA鉴定的深度学习
  3. Javaweb酒店预约管理系统(框架SpringBoot+Vue)
  4. WebForm水印照片
  5. Java异常(漂亮简洁的思维导图)
  6. 【沃顿商学院学习笔记】宏观经济学——03国际移民与城市发展Immigration and Cities
  7. 菜孔孔学python--字典
  8. linux子系统的控制台打开方法
  9. CAD绘图设计中怎样删除CAD图层?怎样清理CAD图层文件?
  10. 《操作系统导论》学习笔记(六):逻辑地址空间管理