Python 如何在函数中使用带返回的打印?

Python 如何在函数中使用带返回的打印?,python,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'

我想知道如何使用
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
如果像这样使用脚本:./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

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

这可以根据您的需要工作。

对于特殊输入,您的预期输出是什么?您试图实现什么?过滤掉来自用户的非整数文本的通常行为是调用
int(sys.argv[1])
并处理ValueError异常。@Kasra如果您像这样使用脚本:./myscript.py 10,它应该输出数字10,如果您像这样使用它:./myscript.py Kasra,它应该输出Kasra不是一个数字。我在运行代码时遇到这个错误:print arg1/5 TypeError:不支持的操作数类型/:“str”和“int”@BrunoAlves:您使用的解释器版本是什么?你运行了我的代码的副本吗?在发布SO之前,我在2.7.6中对此进行了测试。我使用Python 2.7.8,并在函数内部复制了您的代码,在函数外部打印,就像在我的示例中一样。@BrunoAlves:我已经编辑了我的答案,希望您理解我的观点。那么我应该使用什么:#永远不要使用eval(),这只是一个示例它接受“a01”作为有效结果(您需要使用
match
而不是
search
)和条件
type(arg1)=type(str())
仍然没有任何意义…@myaut-thanq进行更正。是的,我们需要使用
匹配
而不是
搜索
。我刚刚编辑了Bruno Alves发布的程序,因此我将其保留下来,因为这只是为了便于他理解。