Owner: Olimi tags: 技术整理 date: 2023年7月25日 16:37 status: Published summary: 包含FLASK_SETTINGS_MODULE的设置规则,Fiddler调试中的SSL错误解决方法,Python项目遵循PEP8标准,pandas从数据库中读取数据时的大小写问题,Python异常处理中的try-catch问题,git cherry-pick的使用方法,以及pip install xx[extra]的用法。 type: Post
FLASK_SETTINGS_MODULE
在 Flask 制定的配置规则中,FLASK_SETTINGS_MODULE 环境变量应该被设置为 Flask 应用程序配置模块的 Python 导入路径,即模块的名称,而不是文件路径。这是一种惯例,可以让应用程序的配置与应用程序的代码分离。
在 Flask 中,FLASK_SETTINGS_MODULE 环境变量应该被设置为 Flask 应用程序配置的 Python 导入路径,即模块的完整名称(From Object To Relational db). 这个设置规则需要遵循 Python 的包结构,每个点分隔符表示一个级别的包。
Fiddler调试:SSL: WRONG_VERSION_NUMBER
使用Fiddler对web服务进行抓包时出现错误(关闭fiddler则没有该错误)。
原因:
没懂。Fiddler默认会捕捉HTTPS的流量,但是对转发的HTTPS包无法处理。即设置了一个系统代理https_proxy=https://127.0.0.0.1:8888,但是该127的https服务器默认起不来。
解决:
- 取消Fiddler中捕捉HTTPS流量,在option→https中取消勾选。
另一个思路,让fiddler捕捉https流量,安装证书,试了之后也不行。
clash这种代理也可以转发各种包,http、https都可以转发,也能捕捉所有流量。为啥fiddler代理就不行,https的包不能拆开单纯就是开不到流量里面的内容而已。
1
2
3
4
PS C:\Users\nfuser\workspace\test_flask> python -c 'import urllib.request; print(urllib.request.getproxies())'
{'http': 'http://127.0.0.1:8888'}
PS C:\Users\nfuser\workspace\test_flask> python -c 'import urllib.request; print(urllib.request.getproxies())'
{'http': 'http://127.0.0.1:8888', 'https': 'https://127.0.0.1:8888'}
第一种可以启动,第二种无法启动。会显示:
requests.exceptions.ProxyError: HTTPSConnectionPool(host): Max retries exceeded with url: /realms/euler/.well-known/openid-configuration (Caused by ProxyError(‘Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#https-proxy-error-htt p-proxy’, SSLError(SSLError(1, ‘[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1091)’))))
无法代理https,啊?不确定是python库的问题还是fiddler的问题,没有别的https的接口来测试。
工程规范
| Python项目遵循PEP8标准:[PEP 8 – Style Guide for Python Code | peps.python.org](https://peps.python.org/pep-0008/#comments) |
其中主要对注释规范进行重点学习。
其中docstring:
• 为所有公共模块、函数、类和方法编写文档字符串。文档字符串对于非公共方法不是必需的,但您应该有一个注释来描述该方法的作用。此注释应显示在
def行之后。
1 2 3 4 """ Return a foobang Optional plotz says to frobnicate the bizbaz first. """
在Pycharm中添加一些注释模板:
新建py文件:参考fof原有工程的代码,添加以下模板,在File->settings->Editor->File and Code Templates->Python Script
1 2 3 4 5 6 7
# -*- coding: utf-8 -*- # @Time: ${DATE} ${TIME} # @Author: lijunhui # @File: ${NAME}.py """ ${NAME}.py """
函数注释。
普通函数注释,直接使用”””调出模板,File Settings Tools Python Integrated Tools Docstring format,选择plain风格(默认)。 针对部分已有文件中函数的修改或添加,为表示所有人,再添加作者相关信息的,使用LiveTemplate。File -> Settings -> Editor -> Live Templates。作为前一个的补充。
1 2
@author: $user$ @date: $date$ $time$
参考:
- 使用PyCharm为Python函数增加注释_pycharm函数提升
- (53条消息) pyCharm中添加方法注释(Docstring format & Live Templates)_pycharm 添加方法注释_dkjkls的博客-CSDN博客
数据库
大小写问题:
ORACLE执行SQL时,对于没有””双引号包裹的表名,会将其自动转换为大写的。(ORACLE默认希望以大写编码表名和字段)
(53条消息) oracle sql语句查询时表名和字段名要加双引号的问题详解_sql字段加引号_清平乐的技术专栏的博客-CSDN博客
对于pandas,在使用pandas.read_sql()函数从数据库中读取数据时,如果数据库中的列名使用的是大写字母或者是混合大小写的形式,那么读取到的列名会被自动转换为小写。这是因为pandas默认会将所有的列名转换为小写字母格式。
Python异常处理
在异常处理调用链中:有以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
有三段代码:
第一:
try:
self.compute_one_day()
except EmptyQueryException as e: # 如果无法计算,打印错误信息。一般情况说明已经到了最后一天
logging.info(e)
break
第二:
self._check_adjust()
第三:
self.is_adjust = True
try:
self.new_position = get_strategy_position(self.strategy_id, self.compute_date)
self.adjust_day = 0 # 调仓日,调仓请求当天为0,代表T,随后T+1,T+2..
except EmptyQueryException as e:
self.is_adjust = False # 没有新的调仓请求
logging.debug(f"没有新的调仓请求{e}")
pass
finally:
logging.debug(f"finish check adjust")
if not self.is_adjust:
# 判断是否在调仓过程. 判断方法为查找权重表T-1日是否有虚拟基金,如果有,则说明在调仓过程中
if self._faker_code in self.real_position_yesterday.keys():
self.is_adjust = True
self.adjust_day = self.adjust_day + 1 # 递增一天
如何保证第三段中try捕获到异常后,不跳转回第一段代码,而是继续执行第二段代码后续的内容
一直以为第三段try捕获到了异常,处理完了,为什么还是没有执行第二段后续代码,而是继续抛出异常给第一段代码,就很奇怪。然后发现结果是更外层有个异常捕获:
1
2
3
4
try:
c.compute()
except Exception:
continue
并不是我理解不对,第三段捕获后处理就处理了。但是处理的时候又出现别的错误,抛出其他异常,结果被最外层捕获,缺什么都没处理。直接就迷惑了。
警示:千万不能随便捕获过于宽泛的异常又不处理。认真对待IDE提示的Warning.
git merge specific commit
How to merge a specific commit in Git - Stack Overflow — 如何合并 Git 中的特定提交 - 代码日志
Git - git-cherry-pick Documentation (git-scm.com)
使用git cherry-pick
1
2
3
git checkout master
git cherry-pick e27af03
git push
pip install xx[extra]
用于安装该包中额外的组件,包含下载额外的依赖。
比如。$ pip install flask-jwt-extended[asymmetric_crypto]会额外下载cryptography包。