社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

PaulMcG

PaulMcG 最近创建的主题
PaulMcG 最近回复了
15 年前
回复了 PaulMcG 创建的主题 » 为不同版本的python维护不同版本的codebase的工作流

如果您的代码不过分依赖异常处理程序中的运行时性能,那么您甚至可能在没有单独的py3分支的情况下逃脱。虽然我不得不坚持使用“最小公分母”方法,也就是说,我必须放弃使用一些结构,比如生成器表达式和上下文管理器。我使用dict代替set,并且我所有的生成器表达式都被包装成列表理解,所以它们仍然可以回到python 2.3。我在代码的顶部有一个块负责处理一些2vs3问题(由pyparsing用户robert a clark提供):

_PY3K = sys.version_info[0] > 2
if _PY3K:
    _MAX_INT = sys.maxsize
    basestring = str
    unichr = chr
    unicode = str
    _str2dict = set
    alphas = string.ascii_lowercase + string.ascii_uppercase
else:
    _MAX_INT = sys.maxint
    range = xrange
    def _str2dict(strg):
        return dict( [(c,0) for c in strg] )
    alphas = string.lowercase + string.uppercase

我遇到的最大困难是捕捉异常的不兼容语法,这是在py3中引入的,从

except exceptiontype,varname:

except exceptionType as varname:

当然,如果您不真正需要异常变量,您只需编写:

except exceptionType:

这对py2或py3有效。但是,如果需要访问异常,仍然可以使用跨版本兼容语法:

except exceptionType:
    exceptionvar = sys.exc_info()[1]

这有一个很小的运行时惩罚,这使得它在pyparsing的某些地方不可用,所以我仍然需要维护单独的py2和py3版本。对于源合并,我使用 WinMerge ,这对于保持源代码目录同步非常有用。

因此,尽管我保留了两个版本的代码,但其中一些统一技术帮助我将差异保持在绝对不兼容的最小值。

6 年前
回复了 PaulMcG 创建的主题 » 用python从文本文件中提取数据

在序列周围写一个小包装,去掉所有的换行符:

def newline_stripper(seq):
    for s in seq:
        # or change this to just s.rstrip() to remove all trailing whitespace
        yield s.rstrip('\n')

然后在进行迭代时用它包装文件对象:

with open('text_file.txt') as f:
    for line in newline_stripper(f):
        # do something with your now newline-free lines

这将保留对文件的一次一行的读取,而不是一次全部读取,因为 read().splitlines() 会的。

15 年前
回复了 PaulMcG 创建的主题 » 你知道其他有交互模式的编程语言吗,比如python?[关闭]

Boo 在python和c类型推理和过程兼容编程之间是一个很好的中间基础,与.NET兼容,并且能够编译为clr程序集和.exe。