本文记录我在学习Python的过程中遇到的奇奇怪怪的问题。博主小白一枚,如有谬误,希望大家可以不吝赐教。
字符串
中文符号
报错:SyntaxError: EOL while scanning string literal
你能看出上面的第二个单引号是中文字符吗??
r型字符串(自然字符串)
1 | s = r'D:\n' |
第一个输出为D:\n
,第二个报错EOL,第三个输出D:\n\\
可以看出,第二个例子中,最后的那个反斜杠还是把单引号转义了,尽管带有r的前缀。不过第一个反斜杠没有把n转义成回车。
解释
字符串的末尾,即使是原始(raw)字符串末尾也不能带奇数个反斜杠
使用时要避免奇数个反斜杠出现再在字符串的末尾。
正则表达式
re.sub
1 | import re |
输出分别为yes\no
和yeso
简单一点的解释是:s是正则表达式,除了python自带的字符串转义外,正则表达式本身还要转义一次。第一个例子中,s最终是一个回车符,第二个例子中才是字符串\n
迭代器
迭代器只能迭代一次哎。
要想迭代多次,可以先转化成列表,再对列表进行多次遍历。
list = list(iter)
我的小程序typecho_desktop_cmd
的pic.py
中就这样用的。
requests
今天在阿里云服务器上的python2中import requests时报错
查了下,requests依赖于urllib3和chardet,所以requests中内置了这两个库,所以说有这两个库各有两个,调用时冲突,调用了非内置的那个,所以版本可能不兼容。
解决方案是卸掉上述三个库,然后只安装requests一个就可以了。
1 | pip uninstall urllib3 |
IDLE弹窗错误信息
我手贱,写了一个名为re.py的程序,而且默认保存至python3的根目录下。
而python本身就有个re库,二者重名,导致IDLE初始化时加载了两个re.py,于是弹窗。
删掉自己写的那个re.py就好了。