Python ConfigNumParser ValueError:以10为基数的int()的文本无效:'';
这段代码几乎完全是从a输入的,我还没有注意到任何打字错误,所以可能代码是过时的?为什么这段代码正确地分析了数字,但在KeyWord()和QuotedString()方法上失败了 但是我得到了ValueError:以10为基数的int()的文本无效:“”,因此我添加了一个print语句来帮助调试,以下是终端会话:Python ConfigNumParser ValueError:以10为基数的int()的文本无效:'';,python,parsing,numpy,scipy,pyparsing,Python,Parsing,Numpy,Scipy,Pyparsing,这段代码几乎完全是从a输入的,我还没有注意到任何打字错误,所以可能代码是过时的?为什么这段代码正确地分析了数字,但在KeyWord()和QuotedString()方法上失败了 但是我得到了ValueError:以10为基数的int()的文本无效:“”,因此我添加了一个print语句来帮助调试,以下是终端会话: Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 Type "
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ConfigNumParser as parser
>>> test2 = '''
... 1 2 3.0 0.3 .3 2e3 -.2e+2 +2.2256E-2
... True False nan NAN None
... "word" "two words"
... """'more words', he daid"""
... '''
>>> print parser.pyvalue.searchString(test2)
Converting ['1']
Converting ['2']
Converting ['3.0']
Converting ['0.3']
Converting ['.3']
Converting ['2e3']
Converting ['-.2e+2']
Converting ['+2.2256E-2']
Converting ['']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\Lib\site-packages\pyparsing.py", line 1099, in searchString
return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
File "C:\Python27\Lib\site-packages\pyparsing.py", line 1036, in scanString
nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
File "C:\Python27\Lib\site-packages\pyparsing.py", line 871, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "C:\Python27\Lib\site-packages\pyparsing.py", line 2451, in parseImpl
ret = e._parse( instring, loc, doActions )
File "C:\Python27\Lib\site-packages\pyparsing.py", line 897, in _parseNoCache
tokens = fn( instring, tokensStart, retTokens )
File "C:\Python27\Lib\site-packages\pyparsing.py", line 660, in wrapper
ret = func(*args[limit[0]:])
File "ConfigNumParser.py", line 33, in convert_number
return [int(t[0])]
ValueError: invalid literal for int() with base 10: ''
win32上的Python 2.7.3(默认值,2012年4月10日23:31:26)[MSC v.1500 32位(英特尔)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>将ConfigNumParser作为解析器导入
>>>test2=''
... 1 2 3.0 0.3.3 2 3-.2e+2+2.2256E-2
... 真假难分
... “两个字”
... “‘更多的话’,他说”
... '''
>>>打印parser.pyvalue.searchString(test2)
转换['1']
转换['2']
转换['3.0']
转换['0.3']
转换['.3']
转换['2e3']
转换['-.2e+2']
转换['+2.2256E-2']
转换['']
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
searchString中的文件“C:\Python27\Lib\site packages\pyparsing.py”,第1099行
返回ParseResults([t代表self.scanString(instring,maxMatches)中的t、s、e)])
扫描字符串中的文件“C:\Python27\Lib\site packages\pyparsing.py”,第1036行
nextLoc,tokens=parseFn(instring,preloc,callPreParse=False)
文件“C:\Python27\Lib\site packages\pyparsing.py”,第871行,在_parseNoCache中
loc,tokens=self.parseImpl(指令、预指令、动作)
parseImpl中的文件“C:\Python27\Lib\site packages\pyparsing.py”,第2451行
ret=e._解析(指令、位置、动作)
文件“C:\Python27\Lib\site packages\pyparsing.py”,第897行,在_parseNoCache中
令牌=fn(instring、令牌start、retTokens)
包装器中的文件“C:\Python27\Lib\site packages\pyparsing.py”,第660行
ret=func(*参数[限制[0]:])
文件“ConfigNumParser.py”,第33行,转换号
返回[int(t[0])]
ValueError:基数为10的int()的文本无效:“”
因此,在这里搜索了几个建议之后,我添加了您在上面的评论区中看到的try-catch。现在的结果是:
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ConfigNumParser as parser
>>> test2 = '''
... 1 2 3.0 0.3 .3 2e3 -.2e+2 +2.2256E-2
... True False nan NAN None
... "word" "two words"
... """'more words', he daid"""
... '''
>>> print parser.pyvalue.searchString(test2)
Converting ['1']
Converting ['2']
Converting ['3.0']
Converting ['0.3']
Converting ['.3']
Converting ['2e3']
Converting ['-.2e+2']
Converting ['+2.2256E-2']
Converting ['']
Converting ['']
Converting ['']
<deleted 65+ more of these>
Converting ['']
Converting ['']
Converting ['']
[[1], [2], [3.0], [0.3], [0.3], [2000.0], [-20.0], [0.022256], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], ['']]
>>>
win32上的Python 2.7.3(默认值,2012年4月10日23:31:26)[MSC v.1500 32位(英特尔)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>将ConfigNumParser作为解析器导入
>>>test2=''
... 1 2 3.0 0.3.3 2 3-.2e+2+2.2256E-2
... 真假难分
... “两个字”
... “‘更多的话’,他说”
... '''
>>>打印parser.pyvalue.searchString(test2)
转换['1']
转换['2']
转换['3.0']
转换['0.3']
转换['.3']
转换['2e3']
转换['-.2e+2']
转换['+2.2256E-2']
转换['']
转换['']
转换['']
转换['']
转换['']
转换['']
[[1], [2], [3.0], [0.3], [0.3], [2000.0], [-20.0], [0.022256], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], [''], ['']]
>>>
在我继续搜索和学习的过程中,我认为将问题发布到专业版会对我和其他人有所帮助
问候,,
账单
我还没注意到任何打字错误
……哎呀
(?P<float2>\.\d+)?
(?P\.\d+)?
应该是
(?P<float2>\.\d+)
(?P\.\d+)
这就解决了问题
(?P<float2>\.\d+)?
(?P<float2>\.\d+)