jupyter上:ValueError: only 2 non-keyword arguments accepted

本文描述了在jupyter环境下运行kNN.py代码时遇到的ValueError错误,详细解释了错误原因在于数据集创建时缺少必要的括号,并提供了具体的解决步骤。文章强调,在修改代码后,需要关闭并重新启动jupyter内核以确保更改生效。

前提:在jupyter上运行的代码

代码如下:

#kNN.py
from numpy import *   #导入科学计算包numpy
import operator    #导入运算符模块

def createDataSet():      #定义函数
    group = array([[1.0, 1.1],[1.0, 1.0],[0, 0], [0, 0.1]])   #创建数据集,数组
    labels = ['A', 'A', 'B', 'B']     #创建标签
    return group,labels
import kNN   #导入编辑的模块
group,labels = kNN.createDataSet()    #创建变量group和labels

错误描述:ValueError: only 2 non-keyword arguments accepted
原因为数组少两边少了括号

解决办法为:kNN文件里面修改,添加上括号;

!!在jupyter运行代码时即使修改后还一直出现错误,需要修改文件之后shutdown一下当前打开的文件,重新打开文件即可!!

在这里插入图片描述点赞,关注,收藏👍➕👀点赞,关注,收藏👍➕👀点赞,关注,收藏👍➕👀
😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘
💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪

### 错误分析 在 Python 中使用 `re.split()` 函数时,如果传入的正则表达式模式无法匹配任何内容,或者模式本身为空,则会引发 `ValueError: split() requires a non-empty pattern match` 错误。该问题通常出现在动态生成的正则表达式中,例如从变量获取值或拼接字符串后未正确验证其有效性。 --- ### 解决方案 1. **确保模式非空且有效** 在调用 `re.split()` 前,应确保传入的正则表达式不为空,并且能够匹配目标字符串中的某些内容。可以通过添加条件判断避免错误发生: ```python import re pattern = r'\W+' # 示例模式 text = 'abc, abc, defg, dds' if pattern and re.compile(pattern).pattern: result = re.split(pattern, text) print(result) else: print("Pattern is empty or invalid.") ``` 2. **处理动态生成的模式** 如果正则表达式是动态生成的(如通过用户输入或外部数据构造),建议增加校验逻辑以防止无效模式导致程序崩溃: ```python import re def safe_split(pattern, string): try: return re.split(pattern, string) except re.error as e: print(f"Regex error: {e}") return [string] except ValueError as e: print(f"Split error: {e}") return [string] dynamic_pattern = '' # 假设这是动态生成的模式 text = 'abc, abc, defg, dds' result = safe_split(dynamic_pattern, text) print(result) ``` 3. **测试模式是否匹配** 在实际调用 `re.split()` 之前,可以使用 `re.search()` 检查模式是否能匹配到内容,从而避免因无匹配而抛出异常: ```python import re pattern = r'xyz' # 不匹配任何内容 text = 'abc, abc, defg, dds' if re.search(pattern, text): result = re.split(pattern, text) print(result) else: print("Pattern does not match any part of the string.") ``` 4. **替代方案:使用 str.split()** 如果不需要正则表达式的复杂功能,可以直接使用内置的 `str.split()` 方法,它不会抛出此类错误: ```python text = 'abc, abc, defg, dds' result = text.split(', ') print(result) # ['abc', 'abc', 'defg', 'dds'] ``` --- ### 示例代码 以下是一个完整示例,展示了如何安全地使用 `re.split()` 并处理可能的错误情况: ```python import re def safe_regex_split(pattern, string): if not pattern: print("Pattern is empty.") return [string] try: compiled = re.compile(pattern) if compiled.search(string): return compiled.split(string) else: print("Pattern does not match any part of the string.") return [string] except re.error as e: print(f"Invalid regex pattern: {e}") return [string] # 测试不同情况 test_cases = [ (r'\W+', 'abc, abc, defg, dds'), (r'wxy*', 'abc, abc, defg, dds'), ('', 'abc, abc, defg, dds'), (r'[;,]', 'aaa bbb ccc;ddd eee,fff') ] for pattern, text in test_cases: print(f"Pattern: {pattern}, Text: {text}") result = safe_regex_split(pattern, text) print("Result:", result) print("-" * 40) ``` --- ### 总结 为了解决 `ValueError: split() requires a non-empty pattern match` 错误,需要确保传入的正则表达式模式既非空又有效,并且能够在目标字符串中找到匹配项。此外,可以采用异常处理机制或直接使用更简单的字符串分割方法来规避此问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值