首页 工程问题
文章
取消

工程问题

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服务器默认起不来。

解决:

  1. 取消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 Codepeps.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
      """
    
  • 函数注释。

    • 普通函数注释,直接使用”””调出模板,FileSettingsToolsPython Integrated ToolsDocstring format,选择plain风格(默认)。
    • 针对部分已有文件中函数的修改或添加,为表示所有人,再添加作者相关信息的,使用LiveTemplate。File -> Settings -> Editor -> Live Templates。作为前一个的补充。

      1
      2
      
        @author: $user$
        @date:   $date$ $time$
      

参考:

  1. 使用PyCharm为Python函数增加注释_pycharm函数提升
  2. (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+1T+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]

python - What do square brackets mean in pip install? - Stack Overflow — python - 方括号在 pip 安装中意味着什么? - 堆栈溢出

用于安装该包中额外的组件,包含下载额外的依赖。

比如。$ pip install flask-jwt-extended[asymmetric_crypto]会额外下载cryptography包。

本文由作者按照 CC BY 4.0 进行授权

Web前端

认证和授权