如何在PyScript中从HTML单选按钮解析布尔值?
问题:PyScript中单选按钮值无法正确转为布尔值
在PyScript应用的index.html中设置了两个单选按钮,用于控制是否生成重叠的各向同性高斯blob(通过调整Scikit-Learn make_blobs 的cluster_std参数),但无论点击哪个按钮,解析后得到的都是True,导致参数无法正确切换。
相关代码片段
HTML代码
<div id="input" style="margin: 20px;"> Should the clusters overlap: <br/> <input py-click="generate_blobs()" type="radio" id="true" name="overlaps" value="true"> <label for="true"> True</label> <input py-click="generate_blobs()" type="radio" id="false" name="overlaps" value="false"> <label for="false"> False</label> </div>
原Python代码(问题点)
def generate_blobs(): """Generate isotropic Gaussian blobs for clustering""" over_laps = js.document.getElementsByName("overlaps") for element in over_laps: if element.checked: # 问题根源:Python中任何非空字符串转bool都会得到True overlap = bool(element.value) print(overlap, type(overlap)) break paragraph = Element("Overlap") paragraph.write(f"overlaps: {overlap}") n_samples = 4_000 # if overlap else 2_000 cluster_std = 1.5 if overlap else .4 X, y = datasets.make_blobs( n_samples = n_samples, n_features = 2, centers = 5, cluster_std = cluster_std, shuffle = True, ) return X, y
解决方法
问题出在bool(element.value)的转换逻辑:Python中所有非空字符串转换为布尔值时都会得到True,哪怕字符串是"false"。需要改为直接判断字符串内容,或者调整value值的类型。
方案1:直接判断字符串值(推荐)
修改Python中获取overlap的代码,通过字符串匹配来确定布尔值:
if element.checked: # 转为小写后判断,避免大小写问题 overlap = element.value.lower() == "true"
方案2:使用数值型value
修改HTML中单选按钮的value为数值,再转布尔值:
<input py-click="generate_blobs()" type="radio" id="true" name="overlaps" value="1"> <input py-click="generate_blobs()" type="radio" id="false" name="overlaps" value="0">
Python代码中转换:
if element.checked: overlap = bool(int(element.value))
方案3:用PyScript的Element API简化获取
利用PyScript内置的Element工具直接获取选中的单选按钮值:
def generate_blobs(): # 直接获取name为overlaps的选中元素值 selected_value = Element("overlaps").value overlap = selected_value.lower() == "true" # 后续逻辑不变...
修改后效果
选择"False"选项时,overlap会被正确解析为False,cluster_std会设置为0.4,生成不重叠的聚类。
内容的提问来源于stack exchange,提问作者Gustav Rasmussen
相关产品推荐
相关产品推荐

