尝试在Python3中复刻PHP的dechex函数时遇值错误求助
PHP转十六进制逻辑的Python实现及报错修复
报错根源
你碰到的ValueError: invalid literal for int() with base 10: 'init',是因为从HTTP GET请求拿到的ITEM_ID包含非数字内容(比如'init')。Python的int()函数遇到非数字字符串会直接抛出异常,而PHP的intval()会自动将非数字内容转为0,这是两者的核心差异。
对齐PHP逻辑的Python代码
要完全复刻dechex(intval($id))的行为,需要兼顾合法数字字符串转换和非法输入容错,还要去掉Pythonhex()默认的0x前缀:
# 替换为你从GET请求获取ITEM_ID的代码 ITEM_ID = request.GET.get("ITEM_ID", "") # 模拟PHP intval()的容错逻辑:非数字输入转为0 try: file_number = int(ITEM_ID) except ValueError: file_number = 0 # 转换为十六进制并去掉0x前缀,和dechex()输出格式对齐 file_hex = hex(file_number)[2:] file_new = f"{file_hex}.pdf"
可选优化:固定十六进制长度
如果需要保证十六进制字符串的长度(比如适配原PHP处理8位ID的输出长度),可以用格式化字符串补零:
# 示例:补到8位十六进制,不足左侧补0 file_hex = f"{file_number:08x}" file_new = f"{file_hex}.pdf"
内容的提问来源于stack exchange,提问作者Bluchip Studio
相关产品推荐
相关产品推荐

