本文记录我在学习Python的过程中遇到的奇奇怪怪的问题。博主小白一枚,如有谬误,希望大家可以不吝赐教。

字符串

中文符号

img

报错:SyntaxError: EOL while scanning string literal

你能看出上面的第二个单引号是中文字符吗??

r型字符串(自然字符串)

s = r'D:\n'
print(s)

s = r'D:\n\'
print(s)

s = r'D:\n\\'
print(s)

第一个输出为D:\n,第二个报错EOL,第三个输出D:\n\\

可以看出,第二个例子中,最后的那个反斜杠还是把单引号转义了,尽管带有r的前缀。不过第一个反斜杠没有把n转义成回车。

解释

字符串的末尾,即使是原始(raw)字符串末尾也不能带奇数个反斜杠

使用时要避免奇数个反斜杠出现再在字符串的末尾。

正则表达式

re.sub

import re
s = r'\n'
ss = r'yes\no'
sss = re.sub(s, '', ss)
print(sss)

s = r'\\n'
ss = r'yes\no'
sss = re.sub(s, '', ss)
print(sss)

输出分别为yes\noyeso

简单一点的解释是:s是正则表达式,除了python自带的字符串转义外,正则表达式本身还要转义一次。第一个例子中,s最终是一个回车符,第二个例子中才是字符串\n

迭代器

迭代器只能迭代一次哎。

要想迭代多次,可以先转化成列表,再对列表进行多次遍历。

list = list(iter)

我的小程序typecho_desktop_cmdpic.py中就这样用的。

requests

今天在阿里云服务器上的python2中import requests时报错

1570352786600

查了下,requests依赖于urllib3和chardet,所以requests中内置了这两个库,所以说有这两个库各有两个,调用时冲突,调用了非内置的那个,所以版本可能不兼容。

解决方案是卸掉上述三个库,然后只安装requests一个就可以了。

pip uninstall urllib3
pip uninstall chardet
pip install requests

IDLE弹窗错误信息

1574519535547

我手贱,写了一个名为re.py的程序,而且默认保存至python3的根目录下。

而python本身就有个re库,二者重名,导致IDLE初始化时加载了两个re.py,于是弹窗。

删掉自己写的那个re.py就好了。

Last modification:September 9th, 2020 at 03:13 pm