当前位置:首页 » Python入门 » Python 代码调试技巧示例代码

Python 代码调试技巧示例代码

302°c 2021年02月19日 08:12 Python入门 0条评论
  移步手机端

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章

Debug 关于任何开发人员都是一项十分重要的技术,它能够协助咱们精确的定位过错,发现程序中的 bug。python ()供给了一系列 debug 的东西和包,可供咱们挑选。本文将首要论述怎么运用 python !debug 相关东西进行 debug。

运用 pdb 进行调试

pdb 是 python 自带的一个包,为 python 程序供给了一种交互的源代码调试功用,首要特性包含设置断点、单步调试、进入函数调试、检查当时代码、检查栈片段、动态改动变量的值等。pdb 供给了一些常用的调试指令,概况见表 1。

表 1. pdb 常用指令



指令解说
break 或 b 设置断点设置断点
continue 或 c持续履行程序
list 或 l检查当时行的代码段
step 或 s进入函数
return 或 r履行代码直到从当时函数回来
exit 或 q间断并退出
next 或 n履行下一行
pp打印变量的值
help协助

下面结合具体的实例叙述怎么运用 pdb 进行调试。

清单 1. 测验代码示例

import pdb 
 a = "aaa"
 pdb.set_trace() 
 b = "bbb"
 c = "ccc"
 final = a + b + c 
 print final

开端调试:直接运转脚本,会停留在 pdb.set_trace() 处,挑选 n+enter 能够履行当时的 statement。在第一次按下了 n+enter 之后能够直接按 enter 表明重复履行上一条 debug 指令。

清单 2. 运用 pdb 调试

[root@rcc-pok-idg-2255 ~]# python epdb1.py 
 > /root/epdb1.py(4)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb1.py(5)?() 
 -> c = "ccc"
 (Pdb) 
 > /root/epdb1.py(6)?() 
 -> final = a + b + c 
 (Pdb) list 
 1 import pdb 
 2 a = "aaa"
 3 pdb.set_trace() 
 4 b = "bbb"
 5 c = "ccc"
 6 -> final = a + b + c 
 7 print final 
 [EOF] 
 (Pdb) 
 [EOF] 
 (Pdb) n 
 > /root/epdb1.py(7)?() 
 -> print final 
 (Pdb)

退出 debug:运用 quit 或许 q 能够退出当时的 debug,可是 quit 会以一种十分粗鲁的办法退出程序,其成果是直接 crash。

清单 3. 退出 debug

[root@rcc-pok-idg-2255 ~]# python epdb1.py 
 > /root/epdb1.py(4)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb1.py(5)?() 
 -> c = "ccc"
 (Pdb) q 
 Traceback (most recent call last): 
 File "epdb1.py", line 5, in ? 
 c = "ccc"
 File "epdb1.py", line 5, in ? 
 c = "ccc"
 File "/usr/lib64/python2.4/bdb.py", line 48, in trace_dispatch 
 return self.dispatch_line(frame) 
 File "/usr/lib64/python2.4/bdb.py", line 67, in dispatch_line 
 if self.quitting: raise BdbQuit 
 bdb.BdbQuit

打印变量的值:假如需求在调试进程中打印变量的值,能够直接运用 p 加上变量名,可是需求留意的是打印只是在当时的 statement 现已被履行了之后才干看到具体的值,否则会报 NameError: < exceptions.NameError … ....> 过错。

清单 4. debug 进程中打印变量

[root@rcc-pok-idg-2255 ~]# python epdb1.py 
 > /root/epdb1.py(4)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb1.py(5)?() 
 -> c = "ccc"
 (Pdb) p b 
'bbb'
 (Pdb) 
'bbb'
 (Pdb) n 
 > /root/epdb1.py(6)?() 
 -> final = a + b + c 
 (Pdb) p c 
'ccc'
 (Pdb) p final 
 *** NameError: <exceptions.NameError instance at 0x1551b710 > 
 (Pdb) n 
 > /root/epdb1.py(7)?() 
 -> print final 
 (Pdb) p final 
'aaabbbccc'
 (Pdb)

运用 c 能够中止当时的 debug 使程序持续履行。假如鄙人面的程序中持续有 set_statement() 的声明,则又会从头进入到 debug 的状况,读者能够在代码 print final 之前再加上 set_trace() 验证。

清单 5. 中止 debug 持续履行程序

[root@rcc-pok-idg-2255 ~]# python epdb1.py 
 > /root/epdb1.py(4)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb1.py(5)?() 
 -> c = "ccc"
 (Pdb) c 
 aaabbbccc

显现代码:在 debug 的时分纷歧定能记住当时的代码块,如要要检查具体的代码块,则能够经过运用 list 或许 l 指令显现。list 会用箭头 -> 指向当时 debug 的句子。

清单 6. debug 进程中显现代码

[root@rcc-pok-idg-2255 ~]# python epdb1.py 
 > /root/epdb1.py(4)?() 
 -> b = "bbb"
 (Pdb) list 
  import pdb 
  a = "aaa"
  pdb.set_trace() 
 -> b = "bbb"
  c = "ccc"
  final = a + b + c 
  pdb.set_trace() 
  print final 
 [EOF] 
 (Pdb) c 
 > /root/epdb1.py(8)?() 
 -> print final 
 (Pdb) list 
  pdb.set_trace() 
  b = "bbb"
  c = "ccc"
  final = a + b + c 
  pdb.set_trace() 
 -> print final 
 [EOF] 
 (Pdb)

在运用函数的状况下进行 debug

清单 7. 运用函数的比方

import pdb 
 def combine(s1,s2): # define subroutine combine, which... 
 s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ... 
 s3 = '"' + s3 +'"' # encloses it in double quotes,... 
 return s3  # and returns it. 
 a = "aaa"
 pdb.set_trace() 
 b = "bbb"
 c = "ccc"
 final = combine(a,b) 
 print final

假如直接运用 n 进行 debug 则到 final=combine(a,b) 这句的时分会将其作为一般的赋值句子处理,进入到 print final。假如想要对函数进行 debug 怎么处理呢 ? 能够直接运用 s 进入函数块。函数里边的单步调试与上面的介绍类似。假如不想在函数里单步调试能够在断点处直接按 r 退出到调用的当地。

清单 8. 对函数进行 debug

[root@rcc-pok-idg-2255 ~]# python epdb2.py 
 > /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb2.py(11)?() 
 -> c = "ccc"
 (Pdb) n 
 > /root/epdb2.py(12)?() 
 -> final = combine(a,b) 
 (Pdb) s 
 --Call-- 
 > /root/epdb2.py(3)combine() 
 -> def combine(s1,s2): # define subroutine combine, which... 
 (Pdb) n 
 > /root/epdb2.py(4)combine() 
 -> s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ... 
 (Pdb) list 
  import pdb 
 
  def combine(s1,s2): # define subroutine combine, which... 
 -> s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ... 
  s3 = '"' + s3 +'"' # encloses it in double quotes,... 
  return s3  # and returns it. 
 
  a = "aaa"
  pdb.set_trace() 
  b = "bbb"
  c = "ccc"
 (Pdb) n 
 > /root/epdb2.py(5)combine() 
 -> s3 = '"' + s3 +'"' # encloses it in double quotes,... 
 (Pdb) n 
 > /root/epdb2.py(6)combine() 
 -> return s3  # and returns it. 
 (Pdb) n 
 --Return-- 
 > /root/epdb2.py(6)combine()->'"aaabbbaaa"'
 -> return s3  # and returns it. 
 (Pdb) n 
 > /root/epdb2.py(13)?() 
 -> print final 
 (Pdb)

在调试的时分动态改动值 。在调试的时分能够动态改动变量的值,具体如下实例。需求留意的是下面有个过错,原因是 b 现已被赋值了,假如想从头改动 b 的赋值,则应该运用! B。

清单 9. 在调试的时分动态改动值

[root@rcc-pok-idg-2255 ~]# python epdb2.py 
 > /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) var = "1234"
 (Pdb) b = "avfe"
 *** The specified object '= "avfe"' is not a function 
 or was not found along sys.path. 
 (Pdb) !b="afdfd"
 (Pdb)

pdb 调试有个显着的缺点便是关于多线程,长途调试等支撑得不够好,一起没有较为直观的界面显现,不太合适大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因而需求运用更为高档的调试东西。接下来将介绍 PyCharm IDE 的调试办法 .

运用 PyCharm 进行调试

PyCharm 是由 JetBrains 打造的一款 python ide,具有语法高亮、Project 办理、代码跳转、智能提示、主动完结、单元测验、版别操控等功用,一起供给了对 Django 开发以及 Google App Engine 的支撑。分为个人独立版和商业版,需求 license 支撑,也能够获取免费的 30 天试用。试用版别的 Pycharm 能够在官网上下载,下载地址为:http://www.jetbrains.com/pycharm/download/index.html。 PyCharm 一起供给了较为完善的调试功用,支撑多线程,长途调试等,能够支撑断点设置,单步方法,表达式求值,变量检查等一系列功用。PyCharm IDE 的调试窗口布局如图 1 所示。

图 1. PyCharm IDE 窗口布局


下面结合实例叙述怎么运用 PyCharm 进行多线程调试。具体调试所用的代码实例见清单 10。

清单 10. PyCharm 调试代码实例

__author__ = 'zhangying'
 #!/usr/bin/python 
 import thread 
 import time 
 # Define a function for the thread 
 def print_time( threadName, delay): 
 count = 0 
 while count < 5: 
 count += 1 
 print "%s: %s" % ( threadName, time.ctime(time.time()) ) 
 def check_sum(threadName,valueA,valueB): 
 print "to calculate the sum of two number her"
 result=sum(valueA,valueB) 
 print "the result is" ,result; 
 def sum(valueA,valueB): 
 if valueA >0 and valueB>0: 
 return valueA+valueB 
 def readFile(threadName, filename): 
 file = open(filename) 
 for line in file.xreadlines(): 
 print line 
 try: 
 thread.start_new_thread( print_time, ("Thread-1", 2, ) ) 
 thread.start_new_thread( check_sum, ("Thread-2", 4,5, ) ) 
 thread.start_new_thread( readFile, ("Thread-3","test.txt",)) 
 except: 
 print "Error: unable to start thread"
 while 1: 
 # 	 print "end"
 pass

在调试之前一般需求设置断点,断点能够设置在循环或许条件判别的表达式处或许程序的要害点。设置断点的办法十分简略:在代码修改框中将光标移动到需求设置断点的行,然后直接按 Ctrl+F8 或许挑选菜单"Run"->"Toggle Line Break Point",更为直接的办法是双击代码修改处左边边际,能够看到呈现赤色的小圆点(如图 2)。当调试开端的时分,当时正在履行的代码会直接显现为蓝色。下图中设置了三个断点,蓝色高亮显现的为正在履行的代码。

图 2. 断点设置


表达式求值:在调试进程中有的时分需求追寻一些表达式的值来发现程序中的问题,Pycharm 支撑表达式求值,能够经过选中该表达式,然后挑选“Run”->”Evaluate Expression”,在呈现的窗口中直接挑选 Evaluate 便能够检查。

Pychar 一起供给了 Variables 和 Watches 窗口,其间调试进程中所触及的具体变量的值能够直接在 variable 一栏中检查。

图 3. 变量检查


假如要动态的监测某个变量能够直接选中该变量并挑选菜单”Run”->”Add Watch”增加到 watches 栏中。当调试进行到该变量地点的句子时,在该窗口中能够直接看到该变量的具体值。

图 4. 监测变量


关于多线程程序来说,一般会有多个线程,当需求 debug 的断点别离设置在不同线程对应的线程体中的时分,一般需求 IDE 有杰出的多线程调试功用的支撑。 Pycharm 中在主线程发动子线程的时分会主动产生一个 Dummy 最初的姓名的虚拟线程,每一个 frame 对应各自的调试帧。如图 5,本实例中一共有四个线程,其间主线程生成了三个线程,别离为 Dummy-4,Dummy-5,Dummy-6. 其间 Dummy-4 对应线程 1,其他别离对应线程 2 和线程 3。

图 5. 多线程窗口


当调试进入到各个线程的子程序时,Frame 会主动切换到其所对应的 frame,相应的变量栏中也会显现与该进程对应的相关变量,如图 6,直接操控调试按钮,如 setp in,step over 便能够便利的进行调试。

图 6. 子线程调试


运用 PyDev 进行调试

PyDev 是一个开源的的 plugin,它能够便利的和 Eclipse 集成,供给便利强壮的调试功用。一起作为一个优异的 python idE 还供给语法过错提示、源代码修改帮手、Quick Outline、Globals Browser、Hierarchy View、运转等强壮功用。下面叙述怎么将 PyDev 和 Eclipse 集成。在装置 PyDev 之前,需求先装置 Java 1.4 或更高版别、Eclipse 以及 Python。 第一步:发动 Eclipse,在 Eclipse 菜单栏中找到 Help 栏,挑选 Help > Install New Software,并挑选 Add button,增加 Ptdev 的下载站点 http://pydev.org/updates。挑选 PyDev 之后完结余下的进程便能够装置 PyDev。

图 7. 装置 PyDev


装置完结之后需求装备 python ()解说器,在 Eclipse 菜单栏中,挑选 Window > Preferences > Pydev > Interpreter – Python。python !装置在 C:\python27 途径下。单击 New,挑选 Python 解说器 python.exe,翻开后显现出一个包含许多复选框的窗口,挑选需求参加体系 PYTHONPATH 的途径,单击 OK。

图 8. 装备 PyDev


在装备完 Pydev 之后,能够经过在 Eclipse 菜单栏中,挑选 File > New > Project > Pydev >Pydev Project,单击 Next 创立 Python 项目,下面的内容假定 python 项目现已创立,而且有个需求调试的脚本 remote.py(具体内容如下),它是一个登陆到长途机器上去履行一些指令的脚本,在运转的时分需求传入一些参数,下面将具体叙述怎么在调试进程中传入参数 .

清单 11. Pydev 调试示例代码

#!/usr/bin/env python 
 import os 	 
 def telnetdo(HOST=None, USER=None, PASS=None, COMMAND=None): #define a function 
	 import telnetlib, sys 
	 if not HOST: 
		 try: 
			 HOST = sys.argv[1] 
			 USER = sys.argv[2] 
			 PASS = sys.argv[3] 
			 COMMAND = sys.argv[4] 
		 except: 
			 print "Usage: remote.py host user pass command"
			 return 
	 tn = telnetlib.Telnet() # 
	 try: 
		 tn.open(HOST) 
	 except: 
		 print "Cannot open host"
		 return 
	 tn.read_until("login:") 
	 tn.write(USER + '\n') 
	 if PASS: 
		 tn.read_until("Password:") 
		 tn.write(PASS + '\n') 
		 tn.write(COMMAND + '\n') 
		 tn.write("exit\n") 
		 tmp = tn.read_all() 
		 tn.close() 
		 del tn 
		 return tmp 
		
 if __name__ == '__main__': 
	 print telnetdo()

在调试的时分有些状况需求传入一些参数,在调试之前需求进行相应的装备以便接纳所需求的参数,挑选需求调试的程序(本例 remote.py),该脚本在 debug 的进程中需求输入四个参数:host,user,password 以及指令。在 eclipse 的工程目录下挑选需求 debug 的程序,单击右键,挑选“Debug As”->“Debug Configurations”,在 Arguments Tab 页中挑选“Variables”。如下 图 9 所示 .

图 9. 装备变量


在窗口”Select Variable”之后挑选“Edit Varuables” ,呈现如下窗口,鄙人图中挑选”New” 并在弹出的窗口中输入对应的变量名和值。特别需求留意的是在值的后边必定要有空格,否则一切的参数都会被作为第一个参数读入。

图 10. 增加具体变量


依照以上办法顺次装备完一切参数,然后在”select variable“窗口中装置参数所需求的次序顺次挑选对应的变量。装备完结之后状况如下图 11 所示。

图 11. 完结装备


挑选 Debug 便能够开端程序的调试,调试办法与 eclipse 内置的调试功用的运用类似,而且支撑多线程的 debug,这方面的文章现已有许多,读者能够自行查找阅览,或许参阅”运用 Eclipse 渠道进行调试“一文。

运用日志功用到达调试的意图

日志信息是软件开发进程中进行调试的一种十分有用的办法,特别是在大型软件开发进程需求许多相关人员进行协作的状况下。开发人员经过在代码中参加一些特定的能够记载软件运转进程中的各种事情信息能够有利于鉴别代码中存在的问题。这些信息或许包含时刻,描绘信息以及过错或许反常产生时分的特定上下文信息。 最原始的 debug 办法是经过在代码中嵌入 print 句子,经过输出一些相关的信息来定位程序的问题。但这种办法有必定的缺点,正常的程序输出和 debug 信息混合在一起,给剖析带来必定困难,当程序调试完毕不再需求 debug 输出的时分,一般没有很简略的办法将 print 的信息屏蔽掉或许定位到文件。python 中自带的 logging 模块能够比较便利的处理这些问题,它供给日志功用,将 logger 的 level 分为五个等级,能够经过 Logger.setLevel(lvl) 来设置。默许的等级为 warning。

表 2. 日志的等级



Level运用景象
DEBUG具体的信息,在追寻问题的时分运用
INFO正常的信息
WARNING一些不行预见的问题产生,或许即将产生,如磁盘空间低一级,但不影响程序的运转
ERROR因为某些严峻的问题,程序中的一些功用受到影响
CRITICAL严峻的过错,或许程序自身不能够持续运转

logging lib 包含 4 个首要目标

  • logger:logger 是程序信息输出的接口。它涣散在不同的代码中使得程序能够在运转的时分记载相应的信息,并依据设置的日志等级或 filter 来决议哪些信息需求输出并将这些信息分发到其相关的 handler。常用的办法有 Logger.setLevel(),Logger.addHandler() ,Logger.removeHandler() ,Logger.addFilter() ,Logger.debug(), Logger.info(), Logger.warning(), Logger.error(),getLogger() 等。logger 支撑层次承继联系,子 logger 的称号一般是父 logger.name 的办法。假如不创立 logger 的实例,则运用默许的 root logger,经过 logging.getLogger() 或许 logging.getLogger("") 得到 root logger 实例。

  • Handler:Handler 用来处理信息的输出,能够将信息输出到操控台,文件或许网络。能够经过 Logger.addHandler() 来给 logger 目标增加 handler,常用的 handler 有 StreamHandler 和 FileHandler 类。StreamHandler 发送过错信息到流,而 FileHandler 类用于向文件输出日志信息,这两个 handler 界说在 logging 的中心模块中。其他的 hander 界说在 logging.handles 模块中,如 HTTPHandler,SocketHandler。

  • Formatter:Formatter 则决议了 log 信息的格局 , 格局运用类似于 %(< dictionary key >)s 的方法来界说,如'%(asctime)s - %(levelname)s - %(message)s',支撑的 key 能够在 python 自带的文档 LogRecord attributes 中检查。

  • Filter:Filter 用来决议哪些信息需求输出。能够被 handler 和 logger 运用,支撑层次联系,比方假如设置了 filter 为称号为 A.B 的 logger,则该 logger 和其子 logger 的信息会被输出,如 A.B,A.B.C.

清单 12. 日志运用示例

import logging 
 LOG1=logging.getLogger('b.c') 
 LOG2=logging.getLogger('d.e') 
 filehandler = logging.FileHandler('test.log','a') 
 formatter = logging.Formatter('%(name)s %(asctime)s %(levelname)s %(message)s') 
 filehandler.setFormatter(formatter) 
 filter=logging.Filter('b') 
 filehandler.addFilter(filter) 
 LOG1.addHandler(filehandler) 
 LOG2.addHandler(filehandler) 
 LOG1.setLevel(logging.INFO) 
 LOG2.setLevel(logging.DEBUG) 
 LOG1.debug('it is a debug info for log1') 
 LOG1.info('normal infor for log1') 
 LOG1.warning('warning info for log1:b.c') 
 LOG1.error('error info for log1:abcd') 
 LOG1.critical('critical info for log1:not worked') 
 LOG2.debug('debug info for log2') 
 LOG2.info('normal info for log2') 
 LOG2.warning('warning info for log2') 
 LOG2.error('error:b.c') 
 LOG2.critical('critical')

上例设置了 filter b,则 b.c 为 b 的子 logger,因而满意过滤条件该 logger 相关的日志信息会 被输出,而其他不满意条件的 logger(这里是 d.e)会被过滤掉。

清单 13. 输出成果

b.c 2011-11-25 11:07:29,733 INFO normal infor for log1
 b.c 2011-11-25 11:07:29,733 WARNING warning info for log1:b.c
 b.c 2011-11-25 11:07:29,733 ERROR error info for log1:abcd
 b.c 2011-11-25 11:07:29,733 CRITICAL critical info for log1:not worked

logging 的运用十分简略,一起它是线程安全的,下面结合多线程的比方叙述怎么运用 logging 进行 debug。

清单 14. 多线程运用 logging

logging.conf 
 [loggers] 
 keys=root,simpleExample 

 [handlers] 
 keys=consoleHandler 

 [formatters] 
 keys=simpleFormatter 

 [logger_root] 
 level=DEBUG 
 handlers=consoleHandler 

 [logger_simpleExample] 
 level=DEBUG 
 handlers=consoleHandler 
 qualname=simpleExample 
 propagate=0 

 [handler_consoleHandler] 
 class="StreamHandler" 
 level=DEBUG 
 formatter=simpleFormatter 
 args=(sys.stdout,) 

 [formatter_simpleFormatter] 
 format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 
 datefmt= 

 code example: 
 #!/usr/bin/python 
 import thread 
 import time 
 import logging 
 import logging.config 
 logging.config.fileConfig('logging.conf') 
 # create logger 
 logger = logging.getLogger('simpleExample') 
 # Define a function for the thread 
 def print_time( threadName, delay): 
	 logger.debug('thread 1 call print_time function body') 
	 count = 0 
	 logger.debug('count:%s',count)

总结

全文介绍了 python 中 debug 的几种不同的办法,包含 pdb 模块、运用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试,期望能给相关 python 运用者一点参阅。更多关于 python debugger 的材料能够拜见参阅材料。

到此这篇关于Python 代码调试技巧示例代码的文章就介绍到这了,更多相关Python 代码调试技巧内容请查找python学习网曾经的文章或持续阅读下面的相关文章期望我们今后多多支撑python学习网!

欢迎阅读本文,希望本文对您有所帮助!

本文链接:http://www.cqrxzs.com/2445.html

版权声明:本文为原创文章,版权归 雨凡教育 所有,欢迎分享本文,转载请保留出处!

百度推荐获取地址:http://tuijian.baidu.com/,百度推荐可能会有一些未知的问题,使用中有任何问题请直接联系百度官方客服!

评论(0) 赞助本站

发表评论:


【顶】 【踩】 【好】 【懵】 【赞】 【表情】

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

推荐阅读
04月21日

python完成机器人卡牌

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 3982次

详细介绍 这一事例关键利用turtle库完成依据键入动态性展现不一样智能机器人的图象和属性信息。 编码一部分非原創仅仅干了一丝改动和梳理促使更易阅读文章。 图片和文档資源请浏览git仓库获得:连接详细地址 涉及到下列知识要点: 1.文档载入 2.字典 3.turtle库的应用 4.操纵句子  完成的实际效果 编码 #!/bin/python3 from turtle import * from random import choice screen = Screen() screen.se...

04月21日

Python中断多种循环的思路小结

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 3252次

I. 跳出单循环 无论是什么计算机语言,都是有很有可能会有跳出循环的要求,例如枚举类型时,寻找一个符合条件的数就停止。跳出单循环是非常简单的,例如: for i in range(10): if i > 5: print i break 殊不知,大家有时会必须跳出多种循环系统,而break只可以跳出一层循环系统,例如: for i in range(10): for j in range(10): if i j > 5:...

04月19日

python3 mmh3安装及使用方法

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 303次

mmh3安装方法 hach方式关键有MD、SHA、Murmur、CityHash、MAC等几类方式。mmh3全过程murmurhash3,是一种非数据加密的hash算法,常见于hadoop等分布式系统情景中,在anaconda中安裝应用指令 pip install mmh3 难题1 出错以下: Microsoft Visual C 14.0 is required 表明缺乏C 14的库文件,挑选登录网站  https://visualstudio.microsoft.com/do...

04月19日

python脚本完成音频m4a格式转成MP3格式的实例代码

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 286次

序言 群内见到有些人了解:谁会用python将微信音频文件后缀m4a格式转成mp3格式,果断回了句:我能。 随后就私底下找话题了 解决方案详细介绍以下: 专用工具:windows系统软件,python2.7,变换库ffmpeg 安裝ffmpeg库:免费下载相匹配电脑操作系统版本号 https://ffmpeg.zeranoe.com/builds/ 我这里用的是window 64位 这儿因为途径难题,也没有把ffmpeg添加到系统软件系统变量中,因此我就用的是相对路径 C:/Users...

04月19日

python3中的eval和exec的区别与联络

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 278次

看过许多 在网上的方式,载入文档后打开文件看的确不会再是错码,可是文本文件中读取json时发觉了错码,可能是读文档默认设置的编号格式不对。下边读写能力方式可行。 留意,ensure_ascii=False能够确保不容易以ascii格式编号,确保中文的一切正常变换: import json with open('test.json', 'w', encoding='utf-8') as f: f.write( json.dumps( known_dict,...

04月19日

Django Docker容器化部署之Django-Docker当地部署

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 287次

本章将在本地搭建一个容器化的 Django 项目,感受 Docker 的运作方式。 前期准备 开发环境 虽然有基于 Windows 的 Docker 版本,但各方面兼容做得都不太好(安装也麻烦些),因此建议读者在学习前,自行安装好 Linux 或 Mac 系统。当然你愿意折腾的话,在 Windows 上搞也行。 别担心,以后开发 Django 项目仍然可以在 Windows 下进行,仅仅是开发时不使用 Docker 而已。 软件安装 Docker:学习 Docker 当然要安装 Docker...

04月19日

python编写猜数字小游戏

发布 : | 分类 : Python入门 | 评论 : 0人 | 浏览 : 278次

文中案例为大伙儿共享了python撰写猜数字小游戏的实际编码,供大伙儿参照,具体内容以下 import random secret = random.randint(1, 30) guess = 0 tries = 0 print("我的名字叫阴径,我有一个密秘数字!") print("数字从1到30,你仅有6次机遇!") while int(guess) != secret and tries < 6: print("你猜猜的数字是?") guess = input() if...

您好,欢迎到访网站!
  查看权限