Python中遇到的小问题及解决方法汇总
作者:超二的瘸子 发布时间:2023-10-14 04:58:35
本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习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位置。
七、遇到的报错情况
自己不想要定义太多的函数,个人感觉是想要将不同功能的函数进行分类,因此我尝试用到了类,知道自己这么做可能是想法上就有些不对的,但是想要瞎试试看看效果,所以结果就是报错了.
如图,这是别人遇到的方法,和我的是一样的,我没有定义静态的函数,所以每次使用之前都需要进行实例化才能调用.
来源:http://www.cnblogs.com/stone-dan-dan/p/6269141.html
猜你喜欢
- 1.功能简介此程序模拟员工信息数据库操作,按照语法输入指令即能实现员工信息的增、删、改、查功能。2.实现方法• 架构:本程序采用python
- 方法1:cmd环境下,用pip install selenium可能会很慢方法2:下载selenium安装包手动安装下载地址:https:/
- 当1980年Three Rivers公司第一次推出图形用户界面Perq,产生GUI这个概念的时候,不知道他们有没有想过今天图形界面设计竟然会
- SQL Server 获取数据的总记录数,有两种方式:1.先分页获取数据,然后再查询一遍数据库获取到总数量2.使用count(1) over
- 什么是拼音转换在我们学习语言之前,我们一般会学习拼音来认识汉字,并学会如何读汉字。所以,拼音在对于我们语言的重要性不言而喻。而拼音转换指的是
- 在分析python的参数传递是如何进行的之前,我们需要先来了解一下,python变量和赋值的基本原理,这样有助于我们更好的理解参数传递。py
- 原文地址:How to write Dockerfiles for Python Web Apps原文作者:Praveen Durairaj
- 关于Markdown在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处
- 在移动社交时代,微信已经成为我们生活不可或缺的一部分。2017年的《微信数据报告》中显示:每天有380亿条消息从微信上发出,其中6亿条是语音
- # -*-coding:utf8 -*- ''' Python常见文件操作示例 os.path 模块中的路径名访问函
- 本文实例讲述了JS上传图片前实现图片预览效果的方法。分享给大家供大家参考。具体实现方法如下:<!doctype html public
- 反射的优点它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法一个概念被提出来,就是要明白它的优点有哪些,这样
- 在公司的工作经常要为客户作产品展示的页面,由于客户上传的图片格式大小不一,缩放后会导致变形,于是在星期天抽了点时间,写了一段JS代码,支持图
- 传说用这个语句管用:select top 5 * from tablename order by newid() 我放到sql的查询分析器里
- 场景应用老大我让爬取内部网站获取数据,插入到新建的表中,并每天进行爬取更新数据(后面做了定时任务)。然后根据该表统计每日的新增数量/更新数量
- 本文实例讲述了Python读取properties配置文件操作。分享给大家供大家参考,具体如下:工作需要将Java项目的逻辑改为python
- 本文实例讲述了Python模块的定义,模块的导入,__name__用法。分享给大家供大家参考,具体如下:相关内容:什么是模块模块的导入同级目
- 在使用flask部署Keras,tensorflow等框架时候,经常出现FailedPreconditionError: Attemptin
- 爬取网页的流程一般如下:选着要爬的网址(url)使用 python 登录上这个网址(urlopen、requests 等)读取网页信息(re
- 错误号 错误信息5 &n