python 百度搜索排除关键字bug

用惨痛的经历告诉你Python奇葩语法:代码缩进不是为了排版
用惨痛的经历告诉你Python奇葩语法:代码缩进不是为了排版
[摘要]鉴于没有全面学习Python语法,就直接使用Python语言编程,被Python的潜规则给狠狠的打了一巴掌。不过,最后发现问题,也是一番探索得来,虽然辛苦,但是也很快乐。Python的缩进并不是为了排版哦。 今天要来说一下Python的一个语法规定,那就是代码缩进。今天被这个坑了一阵子,所以来说说经过。 因为项目需要,接触到了Python。然而我不得不吐槽一下Python。
我现在做的后台服务器,使用C++写的核心库,然后透接给Python调用。我们服务器的架构是Nginx+uwsgi+Python+C++。 服务器的基本结构就是:C++写服务器核心功能库,Nginx作为服务器,来接受请求,然后借助插件uwsgi来支持web。为什么用Nginx呢?因为Nginx的高并发性能比Apache强10倍。Nginx将请求传递给uwsgi来处理web。作为Web服务器,必然需要一个后台处理语言程序来处理web请求。Asp.net后台可以是VB脚本也可以是C#。PHP后台则是php。我们这里的Nginx后台选择的是Python。Python、php、VB脚本一样,都是脚本语言。而C#则是编译型语言。所以在后台处理web的请求,uwsgi将Nginx转发过来的请求,做一个处理,然后再传递给Python脚本文件处理。Python脚本文件以py结尾,处理后会生成pyc文件,算是编译过的脚本文件。然后Python就可以和C++提供的库直接对接,Python调用C++导出的库函数,来完成核心功能。也就是说,Python只是做web的逻辑处理,真正的核心功能,都在C++程序里。 这样的架构,你感觉到了什么?哈哈哈,C++也是可以做网站滴,而且这样的架构,性能非常强悍!现在大服务器很多都采用Nginx了,再加上C++代码的高效,简直太赞了。是不是又一次感受到C++的用武之地了呢?! 好了,现在要是的就是Python处理的逻辑。Python处理Web逻辑,然后直接输出结果html结果,从而实现网页的动态交互。Python是脚本语言,所以工作机制和PHP是一样的。Python和PHP都是解释性语言,读取一条代码,执行一条代码,只要前面的是正确的就可以正确的执行,直到遇到Bug再崩溃。而asp.net的程序,则是编译型的,和C++一样的,需要提前编译好,所有代码没有语法错误才行。 然后今天发现一个问题,就是添加数据的时候,网页崩溃了,错误提示为500,即服务器内部错误,也就是服务器端的程序错误。咋一看,应该是代码问题。所以,就开始着手干了。 因为问题是从前端网页发生的,所以,为了定位问题,先去定位产生问题的位置,也就是一个按钮提交数据,然后结果服务器程序崩溃。所以,就去找按钮,然后定位到提交数据的js代码,然后再定位到js代码中提交的函数,根据函数名,确定了后台的Python页面文件,即py结尾的文件。 从这一步开始,前后台就链接起来了,可以进行联调,即同时看前端页面和后台这个页面的程序。通过火狐浏览器的web开发人员工具的调试器,和VS一样打断点,然后F10一步步的单步跟进,确定了传递的参数,发现和修改及删除的参数一样,所以排除问题。问题不再前端,即前端提交的数据是正确的。 然后就是跟进后台的Python程序。在网站后台,要想调试,可不能向前台一样在浏览器调试,而且是在线运行状态,不太好搞。这和linux开发的嵌入式程序一样,不方便调试。所以大家通常用的一种方法就是打日志。将相关信息自己加写日志的代码写到文件中去,然后从文件中去查看各个代码的执行情况。这一方法非常的有用。我们在VS开发的时候,那调试功能太强大了,对于开发来说,极大提高了开发效率。而此时只能用日志方式调试了。 好吧,既然要写日志,那就要在Python文件中加代码。python写文件的代码,并不难,你不会,随便在网上查一下资料,就有了。而且,函数用法和C语言差不多。其实我并没有去学过Python,而只是看着Python的现有代码去推测语法,然后仿照着些,然后一些特定的函数,就查一下。就这样写好了代码,加到了python代码中。然后保存,测试。 回到网页,因为之前报的错,提供了一个返回主页的按钮,然后就回了主页。主页有一个图表走势控件,会定期刷新,从后台取数据,也就要执行一下刚改的页面的程序。这样一进入主页,挂了,也是500的服务器程序错误。这让我好郁闷,明明代码都是正确的,竟然出现这样的问题。我以为是代码哪里不对,然后将写入文件的内容固定,不用参数,然后保存,还是挂了。好吧,那我再将写文件的函数直接注释了,回去看,还是挂了。然后我直接将写日志的代码都撤了,恢复原样,结果正常了。 我看了几遍网上的资料,代码真的没有错哦。这让我情何以堪。我百思不得其解,但是问题必须解决。虽然已经下班了,但是问题不解决,不想下班。 然后我静静的看,就看着,死死的看着这些代码,就不信看不出来。然后我继续仿照原有的代码来写吧。现在连缩进也仿照,所以,代码和原有代码对齐。然后看看效果,反正此时也没有其他办法,试试看。然后回去看主页,正常!当然,此时那个提交数据的页面还是有问题。主页导致的不正常是一个插曲。 这样有了效果,我再故意将代码又不对齐,然后再看效果,果不其然,主页又挂了。然后我就感觉到,Python中,缩进不一般呀。然后再后面的调试中,遇到缩进的时候,都和原有代码一样缩进。主页就没有出现问题,这样我有一种深深的探索的喜悦。偶尔在粘贴一行代码的时候,少了一个空格,也就没有对齐,竟然报错。此时的我已经很淡定,迅速对齐后,没有问题了。 Python这个对齐问题,耽误了一些时间。然后再后续调试完后,下班回来,吃完饭,已经是晚上9点了。然后回来后,我迅速去求证一个问题,那就Python的缩进问题。我可以推测,Python的缩进是作为语法规则的一部分,而不是C/C++那样的一个排版而已。 然后查询到的解释是:“Python中,是通过代码的缩进,来决定代码的逻辑的。通俗的说,Python中的代码的缩进,不是为了好看,而是觉得代码的含义,上下行代码之间的关系。缩进弄错了,就会导致程序出错,执行结果变成不是你想要的了。”。这样的解释,和我遇见的现象完全一致,和我推测的一样。 所以我不得不感慨到,Python语法真是奇葩,如果不注意,绝对会坑死你。当然,这是会像我这样的,没有全面去学习Python语法,而直接使用Python的人,才会遇到。当然,不排除习惯了C/C++的语法,刚开始学习Python的人也会遇到。而我用惨痛的经历验证了这一个语法。相信我要很久到不会忘记这个语法吧。 至于提交数据那个问题,我另外写一篇文章来解释,后面证明是一个数据库引发的问题,而且,这个问题绝对是你意想不到的问题,所以,也让我很意外。
热门文章HOT NEWS
大家对痛风最深刻的认识就是「疼痛」,但是高尿酸、痛风远不止关节痛。它还可以导致关节功能受损,肾脏损害,加重糖尿病病情,增
HOT ARTICLESPython 3.4.0 beta 2 发布,此版本包括对 3.x 系列的改进和一些小的 bug 修复。Python 3.4 现在是“功能冻结”状态,也就意味着不会添加新特性,最终版本预计最迟在 2014 年 2 月发布。主要更新内容如下:相关资源:下载地址:
PythonTab微信公众号:
Python技术交流互助群 ( 请勿加多个群 ):
相关词搜索:
MySQL中is not null和!=null和null的区别
Copyright & 2012 - .Python 协程 BUG? - V2EX
Python 协程 BUG?
66 天前 &qsnow6
参照,写了个示例,发现语法报错。
import asyncio
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.get('/events') as resp:
print(resp.status)
print(await resp.text())
-------------
File "/Users/zed/PycharmProjects/example/used_aiohttp/1.py", line 3
async with aiohttp.ClientSession() as session:
SyntaxError: invalid syntax
现在是不支持这样的写法了吗
async with xxxxx as xxxx:
1037 次点击所在节点 &
freestyle66 天前得用 async def xxx(): 包起来
freestyle66 天前
qsnow666 天前@ 包起来是可以的
但是看官网的示例是这么写的,还以为是我的姿势不对。。
qsnow666 天前
qsnow666 天前![]( )
qsnow666 天前![]( )
?
qsnow666 天前![]( )
a8715066 天前```
import asyncio
import aiohttp
async def fetch():
async with aiohttp.ClientSession() as session:
async with session.get('/events') as r:
print(r.status)
print(await r.text())
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())
loop.close()
```
我估计官网是默认你会用 asyncio
a8715066 天前原来回复不能用 markdown
LukeXuan66 天前其实我觉得挺需要一个 apython 直接在 async def 环境内执行. py 文件
chy37318066 天前要写在 async def 内
第 1 页 / 共 1 页&
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到
上打开本讨论主题的完整版本。
是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
is a community of developers, designers and creative people.python(16)
1、一行代码更新python数组中对象属性满足某一值的元素
arr = [{'a': 3,'c':4}, {'d':5,'a': 4}, {'a': 1,'b':2}]
[x.update(x,a=9) for x in arr if x.get('a') == 4]
print arr输出:
[{'a': 3, 'c': 4}, {'a': 9, 'd': 5}, {'a': 1, 'b': 2}]
2、求10000以内的质数
from math import sqrt
[ p for p in
range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ]
输出(以N=100为例):
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
3、元素为对象的数组排序
arr = [{'a': 3,'c':4}, {'d':5,'a': 4}, {'a': 1,'b':2}]
arr2=sorted(arr,key=lambda e:e.get('a'),reverse=False)
[{'a': 1, 'b': 2}, {'a': 3, 'c': 4}, {'a': 4, 'd': 5}]
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:54892次
积分:1155
积分:1155
排名:千里之外
原创:58篇
转载:15篇
你好,欢迎。
(1)(2)(1)(1)(2)(1)(2)(2)(1)(10)(5)(1)(12)(5)(1)(1)(2)(2)(2)(5)(4)(2)(9)}

我要回帖

更多关于 python3 json bug 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信