出现问题AttributeError: ‘NoneType‘ object has no attribute ‘replace‘

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

通俗来说 如果不想看其他的就直接

在import execjs之前加入以下代码
 

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')

问题分析

AttributeError: 'NoneType' object has no attribute 'replace'通常出现在尝试对None值调用字符串方法时。在execjs环境下,该错误可能源于子进程输出的编码处理异常。

解决方案

提供的代码通过修改subprocess.Popen的默认编码为utf-8来规避编码问题,但需注意以下实现细节:

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs

替代方案

若上述方法无效,可尝试以下其他方法:

检查Node.js环境 确保系统已安装Node.js且版本兼容。通过命令node -v验证,推荐使用LTS版本。

清理execjs运行时缓存

import execjs
execjs.get().runtime.terminate()  # 终止现有运行时
ctx = execjs.get().compile("你的JS代码")  # 重新初始化

指定编码的完整方案

import subprocess
import execjs

def patch_subprocess():
    original_popen = subprocess.Popen
    def wrapped_popen(*args, **kwargs):
        kwargs['encoding'] = 'utf-8'
        kwargs['errors'] = 'ignore'  # 添加错误处理
        return original_popen(*args, **kwargs)
    subprocess.Popen = wrapped_popen

patch_subprocess()

验证步骤

  1. 创建测试脚本test_encoding.py
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs
print(execjs.eval("'Hello'.toUpperCase()"))  # 应输出"HELLO"

  1. 若仍报错,检查系统环境变量NODE_PATH是否指向正确的Node.js安装目录。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值