如何使用函数返回打印?

时间:2015-04-09 12:22:22

标签: python

我想知道如何使用print返回两个不同的值。 第一个if语句应返回参数arg1,第二个if语句应返回文本“它不是数字”。 有人能给我一个如何解决问题的提示吗?

import sys

arg1 = (sys.argv[1])

def formatnumber(arg1):
    if type(arg1) == type(int()):
        return arg1
    if type(arg1) == type(str()):
        return "It's not a number"
formatnumber(arg1)

print arg1

2 个答案:

答案 0 :(得分:2)

  

如果你使用这样的脚本:./ myscript.py 10,它应该输出数字10,如果你这样使用它:./ myscript.py Kasra,它应该输出Kasra不是数字。

就像我在评论中提到的那样,你做错了。在Python中,正确的方式是说某些数据不是预期的,不是返回“特殊值”而是引发异常。另请注意,Python不会自动解析传入的参数,因此您的函数应如下所示:

def formatnumber(arg1):
    arg1 = eval(arg1) # Never use a eval(), this is only an example
    if not isinstance(arg1, int):
        raise ValueError("not a number")
    return arg1 

int()构造函数已经这样做了,所以让语言确定传入的字符串是否可以强制转换为整数并处理错误。

以下是您的脚本的完整代码:

import sys

try:
    arg1 = int(sys.argv[1])
except IndexError:
    print >> sys.stderr, "You didn't provide an argument"
    sys.exit(1)
except ValueError:
    print >> sys.stderr, "{} is not a valid integer".format(sys.argv[1])
    sys.exit(1)

# Work with arg1 like with integer, i.e.
print arg1 / 5

答案 1 :(得分:0)

python将来自sys.argv []的命令行参数视为字符串,因此您需要进行模式匹配以确定传递的参数是否为数字。你应该像这样编辑你的程序。

import sys
import re
def formatnumber(arg1) :
    pattern = "[0-9]+"
    if re.compile(pattern).match(arg1) :
        return arg1
    elif type(arg1) == type(str()):
        return "It's not a number"
if __name__=="__main__" :
    arg1=sys.argv[1]
    res = formatnumber(arg1)
    print res

这可以按照您的要求运作。