Python2代码迁移至3.X触发int()空字符转换ValueError如何解决
Python 2.X 迁移 Python 3.X 代码修复方案
问题根源
报错和兼容问题核心来自三处错误:
- f-string语法错误:原代码
f'fractionfactor:e'没有将fractionfactor作为变量插值,而是将其作为普通字符串处理,拆分后得到的末尾片段为空,触发ValueError: invalid literal for int() with base 10: ''报错 - 字符串格式化语法错误:原代码
':0.0{}f'.format(value,Precision)格式符占位符位置错误,无法正确生成格式化规则,得到的结果不符合预期 - 除法规则差异:Python 3中
/默认返回浮点数,Python 2中/对整数默认执行整数除法,若要对齐原有逻辑需要调整运算符
修复后的完整代码
import pandas as pd def format_value(valuetoformatx, fractionfactorx): value = valuetoformatx fractionfactor = fractionfactorx # 修复f-string变量插值错误,正确将fractionfactor转为科学计数法格式 Precision = abs(int(f'{fractionfactor:e}'.split('e')[-1])) # 修复格式化字符串占位符错误,正确按指定精度格式化数值 FormattedValue = float(f'{value:.{Precision}f}') return FormattedValue def parPriceinfo(ticker, client): info = client.get_symbol_info(ticker) minPrice = pd.to_numeric(info['filters'][0]["minPrice"]) return minPrice def pairQtyinfo(ticker, client): info = client.get_symbol_info(ticker) minQty = pd.to_numeric(info['filters'][2]['minQty']) return minQty
额外适配说明
- 若原逻辑依赖Python 2的整数除法特性(即
int(str(5/2))返回2而非2.5),将所有整数除法场景的/替换为//即可对齐原有行为 - 若需要保留数值截断而非四舍五入的逻辑,可以在格式化前对value做截断处理,例如使用
math.trunc(value)或者int(value)实现
内容的提问来源于stack exchange,提问作者Jezi Hedi
相关产品推荐
相关产品推荐

