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

我想尽可能多地获得整数的实部,而忘记那些字符串类型的数字。

*对不起,我试图使用乘以 2,但结果是“2”*整数是合法操作*

这是一个例子

>>'123' * 5 
123123123123123

我想分别有两个文件,一个存储结果,一个存储错误。如何结合 linux shell std Input/Output/Error 功能来实现我想要的。我假设最终的 shell 命令应该是这样的:

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

这两个文件应如下所示:

$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

首先,您想要更多类似的东西:

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

其次,你能清楚地说明你的问题吗?我不知道你在处理什么文件

于 2013-09-07T21:25:22.327 回答
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 回答