python编程中遇到的若干问题

问题1:项目需要,引入的Flash框架的server需要在独立的主进程执行,因此尝试用python调用外部程序的方式执行bat来启动,但程序总是一闪而过

代码示意

看起来好像没什么问题,但和直接双击执行run.bat就是不一样,run.bat做了什么呢?

run.bat

run.bat和webServer.py是在同级目录下的,双击bat执行完全没有问题,那么python调用bat后有是如何执行的呢?

python执行bat

问题找到了,python调用bat时的执行空间是主程序所在的路径,因此虽然是按照绝对路径调用的bat,但bat的命令执行也被放到了python主程序的执行路径,当然找不到webServer.py了,服务器没启动成功,一闪而过。如何解决呢?bat做路径兼容。

路径兼容支持参数传递

问题2:全局变量使用不合法UnboundLocalError: local variable 'packagename' referenced before assignment

如果定义了全局变量,后面在方法内只读取的话没有问题,但是如果你在方法内部对全局变量进行修改,那么就可能报上面的错误,为什么呢?

全局变量错误使用

因为python是解释型语言,在方法内,一个变量的使用“print packagename”,会现在方法作用域内查找其定义,找到直接使用,未找到才会到全局搜索。而上面例子,我们在内部想给全局变量赋值“packagename = package_name”,这就让packagename变量变成了局部变量,那么第一条print语句就变成了想要谁出一个还未声明的局部变量了。修改方法很简单,在方法内声明变量为全局变量“global packagename”,然后再使用就可以了。

全局变量先声明再使用

问题3:flask框架跨进程后发生了什么?

来源于一个工具项目,我们想要实时绘图展示Android设备上某apk的运行性能数据(CPU等),前期绘图组件调研人员选择了flash,图像也确实很漂亮,实现也简单,但在笔者接着想将flash与工具项目结合的时候遇到了若干跨进程后的无解问题。

第一个问题:flask server只能运行在自己的独立主进程中。当我们想要将其合并到工具内实例化并启动时,报错如上错误。因此无奈只能让工具调用.bat来启动server。

第二个问题:flask的绘图客户端要依赖完整的浏览器能力。我们之初想要用QtWebKit.QWebView()在工具内部展示绘图客户端(web),结果发现一片空白,而尝试加载其他网页(如qq.com)没有问题。二者的区别,flask的本地127.0.0.1代理的,并未找到根本原因,因此还是调用了PC本地浏览器来展示。

第三个问题:flask server使用os.popen执行adb命令时的返回结果为空。同样的调用方式,我们在工具内调用os.popen的执行结果完全正确,即使我们另起一个线程调用也没问题。但一旦使用flask server调用就不行,百般调试也未果,搞不懂管道的数据哪去了,因此忍痛放弃了flask框架,准备回归matlib框架。

若有flask大牛,期望能够指点下如上使用问题。

问题4:urllib.urlencode()带来的编码问题

问题代码

如上代码,encode后的数据如下:

values=%7B%27p_id%27%3A+%27168%27%2C+%27uin%27%3A+%27%27%2C+%27version%27%3A+%27%27%2C+%27device%27%3A+%27%27%2C+%27time_range%27%3A+%272018%2F04%2F02+-+2018%2F04%2F02%27%2C+%27os%27%3A+%27%27%7D

如果再decode回来:

values={'p_id': '168', 'uin': '', 'version': '', 'device': '', 'time_range': '2018/04/02 - 2018/04/02', 'os': ''}

你会发现每个value的前面默认加了一个空格,而这个空格encode后是‘+’,这个‘+’导致后台策略拒绝服务,那么这里why?

而且如果想保留双引号都不行,会被默认变成单引号。网络检索仅有人提及urllib库无法正确处理嵌套结构的encode,并说明需要自己处理,但给出的解决方案比较片面,因此笔者自己针对自己的需求做了后置处理:

urlencode后置处理

+%27 : +'

%22  :  "

这里还替换了'null',是因为server需要的uin等默认字段是null且不带引号。

以上处理问题解决。

问题5:尝试安装chaco组件时报 command 'swig.exe' failed: No such file or directory

网搜有swig的安装http://www.swig.org/Doc1.3/Windows.html#Windows_installation

到swig官网下载最新的for windows的zip包,解压到某个目录下,并在环境变量中添加对应路径即可解决问题。

http://www.swig.org/download.html (官网下载地址)

swig-windows版包含swig.exe

接下来你可能会遇到第二个错误:error: Unable to find vcvarsall.bat

解决该问题过程中,有人说是python和本地的vc编译环境版本不对应,具体的映射关系如下:

python与vc版本对应

查询本地python需要版本:

1500对应vc2008

不幸的是本地是安装有vc2008的:

vc开发环境

另一篇文章讲解到是 64位和32位版本的问题:http://wangye.org/blog/archives/738/,但不幸的本地是vc2015,在疑似的命令行模式下运行对应的命令,编译时报了更多的错误。

问题6:从svn等开源平台下载的python源码,运行遇到‘No Module named xx.xxx’

目录结构是这样的:

root

--script

----main.py

--lib

----a.py

在main.py中我们import了lib.a,但是运行时会提示找不到lib.a。很明显的一个执行环境的问题。那么如何简单解决?

解决一:命令行运行时,在root目录执行即可:root>python ./script/main.py xxxx

解决二:eclipse修改Run Configurations

Run Configurations

    指定工作目录到root目录即可,然后点击 run 就可以正常运行了。


问题7:re.match总是NoneType

看起来明明可以匹配,可总是返回NoneType

正则在线测试是对的
网络获取的字段是unicode的
转utf8后
转不转utf8都是NoneType

换用re.search就可以了,很奇怪,时间原因,暂不探究。留一个疑问在这里~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

问题8:ImportError: Install xlrd >= 1.0.0 for Excel support

该问题发生在pandas使用中,提示xlrd版本低,请升级。但在执行升级命令时又提示无法安装。

最简单的解决方案:到python/Lib/site-packages下xlrd的目录和xlrd-0.9.4-py2.7.egg-info文件删除,然后重新安装即可。

问题9:读取配置文件xxx.ini遇到报错ConfigParser.InterpolationSyntaxError:

'%' must be followed by '%' or '(', found: "%&'"

原因是配置文件中包含了%,把读取方式从cf= configparser.ConfigParser()换成cf = configparser.RawConfigParser()即可解决

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,952评论 17 410
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,215评论 4 16
  • 【本命番】十年ef ,永远感动 音羽,诗一般的名字。音乐创造出了它悠久的羽翼。音羽,如童话般美丽。曾有一位天使 生...
    河谷星霜阅读 438评论 0 2
  • 人与人之间的因缘,或恩或怨,或善或恶,皆是前世之因所促成的果报。 然而,当用忍的态度去对待一切时,即使是恶缘也能得...
    清风明月冯耀杰阅读 381评论 0 9