Python:追加已解析的字符串但抛出不合规的值?
Python: Append a parsed string but throw out non-compliant values?
警告:我是个新手;如果我在提交这个问题之前没有搜索正确的东西,我深表歉意。我发现了很多关于如何忽略错误的信息,但没有什么能像我在这里尝试做的那样。
我有一个简单的脚本,我用它从数据库中获取数据,解析一些字段,然后将解析的值重新写回数据库。多个用户根据分隔模板提交到数据库,但存在一定程度的不合规情况,这意味着有时字符串不包含 all/any 分隔符。我的脚本需要能够通过完全丢弃它们来处理这些实例。
我无法丢弃不兼容的字符串,而不仅仅是忽略它们引发的错误。当我尝试 try-except-pass 时,当我的脚本尝试将已解析的值附加到我最终写回数据库的数组时,我最终遇到了错误。
最初,我的脚本说:
def parse_comments(comments):
parts = comments.split("||")
if len(parts) < 20:
raise ValueError("Comment didn't have enough || delimiters")
return Result._make([parts[i].strip() for i in xrange(2, 21, 3)])
完全兼容的上传会将结果附加到数组并写回数据库。
我试过了try/except:
def parse_comments(comments):
parts = comments.split("||")
try:
Thing._make([parts[i].strip() for i in xrange(2, 21, 3)])
except:
pass
return Thing
但是当我尝试将解析后的值附加到数组时,我最终遇到了一个错误——特别是 TypeError: 'type' object has no attribute 'getitem'
我也试过:
def parse_comments(comments):
parts = comments.split("||")
if len(parts) >= 20:
Thing._make([parts[i].strip() for i in xrange(2, 21, 3)])
else:
pass
return Thing
但无济于事。
tl;dr:我需要解析内容并附加已解析的项目。如果无法按我想要的方式解析字符串,我希望我的代码完全忽略该字符串并继续前进。
我不确定我理解你想做的一切。但我认为你没有在正确的地方发现错误。你自己说过它是在你想将值附加到数组时出现的。所以也许你应该这样做:
try:
# append the parsed values to an array
except TypeError:
pass
你应该在except
之后给出要捕获的异常类型,否则它会捕获any exception, even a user's CTRL+C
which raise a KeyboardInterrupt。
But I end up getting an error when I try and append the parsed values to an array -- specifically TypeError: 'type' object has no attribute 'getitem'
因为Thing
表示事物class本身,而不是的实例class.
当数据无效时,您需要更清楚地考虑您想要什么return。可能是你不能 return 在这里直接使用的任何东西,所以调用代码必须显式检查。
警告:我是个新手;如果我在提交这个问题之前没有搜索正确的东西,我深表歉意。我发现了很多关于如何忽略错误的信息,但没有什么能像我在这里尝试做的那样。
我有一个简单的脚本,我用它从数据库中获取数据,解析一些字段,然后将解析的值重新写回数据库。多个用户根据分隔模板提交到数据库,但存在一定程度的不合规情况,这意味着有时字符串不包含 all/any 分隔符。我的脚本需要能够通过完全丢弃它们来处理这些实例。
我无法丢弃不兼容的字符串,而不仅仅是忽略它们引发的错误。当我尝试 try-except-pass 时,当我的脚本尝试将已解析的值附加到我最终写回数据库的数组时,我最终遇到了错误。
最初,我的脚本说:
def parse_comments(comments):
parts = comments.split("||")
if len(parts) < 20:
raise ValueError("Comment didn't have enough || delimiters")
return Result._make([parts[i].strip() for i in xrange(2, 21, 3)])
完全兼容的上传会将结果附加到数组并写回数据库。
我试过了try/except:
def parse_comments(comments):
parts = comments.split("||")
try:
Thing._make([parts[i].strip() for i in xrange(2, 21, 3)])
except:
pass
return Thing
但是当我尝试将解析后的值附加到数组时,我最终遇到了一个错误——特别是 TypeError: 'type' object has no attribute 'getitem'
我也试过:
def parse_comments(comments):
parts = comments.split("||")
if len(parts) >= 20:
Thing._make([parts[i].strip() for i in xrange(2, 21, 3)])
else:
pass
return Thing
但无济于事。
tl;dr:我需要解析内容并附加已解析的项目。如果无法按我想要的方式解析字符串,我希望我的代码完全忽略该字符串并继续前进。
我不确定我理解你想做的一切。但我认为你没有在正确的地方发现错误。你自己说过它是在你想将值附加到数组时出现的。所以也许你应该这样做:
try:
# append the parsed values to an array
except TypeError:
pass
你应该在except
之后给出要捕获的异常类型,否则它会捕获any exception, even a user's CTRL+C
which raise a KeyboardInterrupt。
But I end up getting an error when I try and append the parsed values to an array -- specifically TypeError: 'type' object has no attribute 'getitem'
因为Thing
表示事物class本身,而不是的实例class.
当数据无效时,您需要更清楚地考虑您想要什么return。可能是你不能 return 在这里直接使用的任何东西,所以调用代码必须显式检查。