どこか私はばかだが、どこに見つけることができない。Python:同じ文字列のスライス、2つの異なる結果
私はPostgreSQLデータベースを使用してPythonスクリプトを実行しています。私はデータベースの例外メッセージから意味のある部分を抽出しようとしています。
(-2147352567, 'Exception occurred.', (0, 'Microsoft OLE DB Provider for ODBC Drivers',
'ERROR: Charge not in a correct status to delete;\nError while executing the query',
None, 0, -2147467259), None)
この文字列には2組の括弧があることに注意してください。まず、外側の位置を見つけてスライスします。私の知る限り、私は括弧とその外側のすべての他のセットを取り除き、同じコードを言うことができるように使用して、その後
-2147352567, 'Exception occurred.', (0, 'Microsoft OLE DB Provider for ODBC Drivers',
'ERROR: Charge not in a correct status to delete;\nError while executing the query',
None, 0, -2147467259), None
:これは予想される結果を与えます。これは、この結果を与える:
(0, 'Microsoft OLE DB Provider for ODBC Drivers',
'ERROR: Charge not in a correct status to delete;\nError while executing the query',
None, 0, -214746725
開き括弧は、私は、スライスの開始と開き括弧の位置に1を加え、find()メソッドと同じ方法の結果を使用していていても、まだここにいます、両方の時間。ここで
はコードです:
print (errorString)
openParenLocation = errorString.find('(')
closeParenLocation = errorString.rfind(')')
strippedString = errorString[openParenLocation + 1:closeParenLocation]
openParenLocation = strippedString.find('(')
closeParenLocation = strippedString.rfind(')')
dbErrorString = errorString[openParenLocation + 1:closeParenLocation]
print (strippedString)
print ("{}, {}".format(openParenLocation, closeParenLocation))
print (dbErrorString)
そして、ここでは加えていない改行と生の出力、次のとおりです。期待通りはるかに小さい文字列を使用して
(-2147352567, 'Exception occurred.', (0, 'Microsoft OLE DB Provider for ODBC Drivers', 'ERROR: Charge not in a correct status to delete;\nError while executing the query', None, 0, -2147467259), None)
-2147352567, 'Exception occurred.', (0, 'Microsoft OLE DB Provider for ODBC Drivers', 'ERROR: Charge not in a correct status to delete;\nError while executing the query', None, 0, -2147467259), None
36, 191
(0, 'Microsoft OLE DB Provider for ODBC Drivers', 'ERROR: Charge not in a correct status to delete;\nError while executing the query', None, 0, -214746725
テストコードは動作します:
testString = "(abc(def)ghij)"
openParenLocation = testString.find('(')
closeParenLocation = testString.rfind(')')
strippedTestString = testString[openParenLocation + 1:closeParenLocation]
openParenLocation = strippedTestString.find('(')
closeParenLocation = strippedTestString.rfind(')')
finalTestString = strippedTestString[openParenLocation + 1:closeParenLocation]
ありがとうございました。
'errorStringに[openParenLocation + 1:closeParenLocation]'?あなたは 'openParenLocation + 1:closeParenLocation'を使って何をしようとしていますか? – alfasin
元々 'errorString'をどうやって取得/作成していますか?これはPythonタプルの 'repr'のように見えます。おそらく、データはタプルとして利用可能であり、それを扱うのは簡単ではありません。あなたの質問には、 'dbErrorString' fron' strippedString'のインデックスを作成していますが、 'strippedString'の代わりに実際のスライシングで' errorString'を使います。 –
外側のかっこと閉じ括弧、および外側のすべてを取り除こうとしています。元の文字列は、データベース関数内でエラー状態が発生したためにODBCから返されたエラー文字列です。文字列はPythonからではなく、タプルではありません。 この作業の目標は、この長いゴブリンク内に含まれているエラーメッセージだけを返すことです。「ERROR:削除する正しい状態ではない」。 –