0%

❓ 我正在尝试使用通过--no-site-packages选项创建的新virtualenv安装MySQL_python适配器的1.2.2版本。 PyPi中显示的当前版本是1.2.3。 有没有办法安装旧版本? 我发现有一篇文章指出应该这样做:

1
pip install MySQL_python==1.2.2

但是,安装后,它仍在站点包中显示MySQL_python-1.2.3-py2.6.egg-info。 这是此软件包专用的问题,还是我做错了什么?


✔️ 您可以通过pip install命令使用版本范围。 像这样:

1
pip install 'stevedore>=1.3.0,<1.4.0'

并且如果该软件包已经安装并且您想要降级,请添加–force-reinstall,如下所示:

1
pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall

❓ 出错TypeError: a bytes-like object is required, not ‘str’。以下是试图通过使用sockets修改用户提供的输入的代码:

1
2
3
4
5
6
7
8
9
10
from socket import *

serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage)
clientSocket.close()

当我执行它并提供输入时,会发生以下错误:

1
2
3
4
5
Input lowercase sentence:fdsgfdf
Traceback (most recent call last):
File "C:\srinath files\NETWORKS\UDPclient.py", line 6, in
clientSocket.sendto(message,(serverName, serverPort))
TypeError: a bytes-like object is required, not 'str'

✔️ 这段代码可能对Python 2有用。但是在Python 3中,这会引起问题,这与位编码有关。 我试图制作一个简单的TCP服务器并遇到相同的问题。 编码对我有用。 尝试使用sendto命令。

1
clientSocket.sendto(message.encode(),(serverName, serverPort))

同样,如果要完全按照发送的方式打印数据,则可以使用.decode()在UDP服务器端接收数据。

❓ 我目前正在尝试在Python记录器中右对齐记录级别字段,现在输出如下:

1
2
3
4
[2011-10-14 13:47:51] [DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] --- ending (smtphandlers.py:99)

我希望这样:

1
2
3
4
[2011-10-14 13:47:51] [   DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [ INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [ WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [ DEBUG] --- ending (smtphandlers.py:99)

第一个块的格式行是:

1
logging.Formatter("[%(asctime)s] [%(levelname)s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

✔️

1
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

✔️ 调用file.write不一定立即将内容写入HD。 它取决于文件对象的缓冲策略。 如果要在某个特定时间强行写入磁盘,则可以使用flush()方法。

请注意,sys.stdout刷新策略取决于安装的配置以及环境变量,因此,如果要保证标准输出和日志文件之间的“并行”写入,必须对两个流都进行flush()

1
2
3
4
5
def write(self, message):
self.terminal.write(message)
self.log.write(message)
self.terminal.flush()
self.log.flush()

❓ Does Python have a finally equivalent for its if/else statements, similar to its try/except/finally statements? Something that would allow us to simplify this:

1
2
3
4
5
6
7
8
9
10
11
if condition1:
do stuff
clean up
elif condition2:
do stuff
clean up
elif condition3:
do stuff
clean up
...
...

to this:

1
2
3
4
5
6
7
8
9
10
if condition1:
do stuff
elif condition2:
do stuff
elif condition3:
do stuff
...
...
finally:
clean up

✔️ It can be done totally non-hackily like this:

1
2
3
4
5
6
7
8
9
10
def function(x,y,z):
if condition1:
blah
elif condition2:
blah2
else:
return False

#finally!
clean up stuff.

❓ 我想用Beautiful Soup和Python解析HTML文件,例如

1
2
3
4
5
6
7
8
9
<h1>Title 1</h1>
<div class="item"><p>content 1</p></div>
<div class="item"><p>content 2</p></div>
...
<h1>Title 2</h1>
<div class="item"><p>content 3</p></div>
<div class="item"><p>content 4</p></div>
<div class="item"><p>content 5</p></div>
...

我如何将其解析为这样的字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"Title 1": [
{
"content": "content 1"
},
{
"content": "content 2"
}
],
"Title 2": [
{
"content": "content 3"
},
{
"content": "content 4"
},
{
"content": "content 5"
}
]
}

✔️ 这是您可以实现的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
soup = bs4.BeautifulSoup(html)
data = {}
row = []
title = ""
for tag in soup:
print(tag)
if tag.name == 'h1':
if title:
data[title] = row
row = []
title = tag.string

elif tag.name == 'div':
row.append(tag.string)

if title:
data[title] = row

❓ 我已经在settings.py中注释掉了csrf处理器和中间件行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
122 
123 TEMPLATE_CONTEXT_PROCESSORS = (
124 'django.contrib.auth.context_processors.auth',
125 # 'django.core.context_processors.csrf',
126 'django.core.context_processors.request',
127 'django.core.context_processors.static',
128 'cyathea.processors.static',
129 )
130
131 MIDDLEWARE_CLASSES = (
132 'django.middleware.common.CommonMiddleware',
133 'django.contrib.sessions.middleware.SessionMiddleware',
134 # 'django.middleware.csrf.CsrfViewMiddleware',
135 'django.contrib.auth.middleware.AuthenticationMiddleware',
136 'django.contrib.messages.middleware.MessageMiddleware',
137 'django.middleware.locale.LocaleMiddleware',
138 # Uncomment the next line for simple clickjacking protection:
139 # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
140 )

但是,当我使用Ajax发送请求时,Django仍然会提示“csrf token is incorrect or missing”,并且在将X-CSRFToken添加到标头后,请求将会成功。

这里发生了什么 ?


✔️ 如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:

1
2
3
4
5
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
return HttpResponse('Hello world')

✔️ Python中唯一具有规范名称的对象是模块,函数和类,并且在定义函数或类或导入模块后,当然不能保证此规范名称在任何命名空间中都具有任何含义。 这些名称也可以在创建对象后进行修改,因此它们可能并不总是特别值得信赖。

如果不递归地遍历命名对象的树,那么您想做的事情是不可能的。 名称是对对象的单向引用。 一个普通的或多种花园的Python对象不包含对其名称的引用。 想象一下,如果要维护一个表示引用它的名称的字符串列表,是否需要每个整数,每个字典,每个列表,每个布尔值! 这将是噩梦,对程序员几乎没有好处。

✔️ 我建议将python脚本(script1.py,script2.py)封装在函数中,然后从schedule.py中依次调用这些函数。

✔️ 最清晰,最快的方法:

1
if 7 in alist

您也可以考虑使用set,但是从列表中构造该集合所花费的时间可能比更快的成员资格测试所节省的时间更多。