-2
numbers = [1,2,3, '4', '5', 6, 7]
for number in numbers:
    print number.real 

できるだけ多くの整数の実部を取得し、それらの文字列型の数値を忘れたいです。

( *申し訳ありませんが、2 を掛けようとしていたのですが、"2" でした * 整数は正当な演算です* )

ここに例があります

>>'123' * 5 
123123123123123

結果を保存するファイルとエラーを保存するファイルの 2 つのファイルを別々に作成したいと考えています。Linux シェルの標準入力/出力/エラー機能を組み合わせて、必要なものを実装する方法。最終的なシェル コマンドは次のようになるはずです。

python script.py >success.file 2>fail.file 

これら 2 つのファイルは次のようになります。

$cat success.file
2
4
6
12
14
$cat fail.file
8
10

Pythonでそれを実装する方法がわかりません。例外を試してください。

4

3 に答える 3

3

乗算演算子は引き続き機能するため、文字列の例外をキャッチすることはできません-この場合、間違ったことをするだけです(文字列が複製されるため、 に'4'なります'44')。したがって、型を明示的に確認する必要があります。

すべての数値が整数 (浮動小数点数なし) であると仮定すると、次のことができます。

import sys
numbers = [1,2,3, '4', '5', 6, 7]
for number in numbers:
    if isinstance(number, int):
        print number * 2
    else:
        print >>sys.stderr, number

decimalフロートにも対処したい場合は、いつでもその型を明示的にチェックできますが、この種のアプローチは常に少し脆弱です-誰かがモジュールや独自の数値のようなクラスから何かを使用するとどうなりますか?

文字列の数値以外の解釈はルールではなく例外である可能性が高いため、単純にそれらを特殊なケースとして扱い、他の数値以外の型の例外をキャッチする方がより堅牢な場合があります。

import sys
numbers = [1,2,3, '4', '5', 6, 7]
for number in numbers:
    if not isinstance(number, str) and not isinstance(number, unicode):
        try:
            print number * 2
        except Exception, e:
            print >>sys.stderr, repr(number)
    else:
        print >>sys.stderr, number

これは Python 2 の場合です。Python 3 では文字列の型が変更されています。

于 2013-09-07T21:26:16.397 に答える
0

sys.argv を使用して、ファイル名の後に続くコマンドを解析できます。走るとき

python myscript.py command1 command2

これらは、次のように sys.argv 内に保存されます。

[in:] import sys
[in:] sys.argv
[out:]  ["myscript.py", "command1", "command2"]

これは簡単な解決策ですが、複雑な実装が必要な場合は argparse というライブラリもあります。そこからは、とても簡単です。

success = sys.argv[1]
fail = sys.argv[2]

# open the files...

for i in numbers:
     # if it's not a number, put it in the fail file
     # if it is duplicate it and put it in success file

私は意図的にソリューション全体を書くことを控えました。そこから自分で組み立てればいいと思います。

于 2013-09-07T21:29:34.793 に答える
0

まず、次のようなものが必要です。

numbers = [1,2,3, '4', '5', 6, 7]
for number in numbers:
    print int(number) * 2

第二に、問題を明確に述べていただけますか。どのファイルを扱っているのかわかりませ

于 2013-09-07T21:25:22.327 に答える