python中乘号可以省略吗_python *乘号在命令行中为什么报错

环境

Mac Os X 10.9

python 2.7

实现功能

命令行传入公式,输出结果

出错原因

‘*‘ 号把整个目录下的文件都当作参数传入了

问题

如何正确传入 * 号?

操作

输入公式 ’2 * 3‘:

python calc.py 2 * 3

print sys.argv 的结果

['calc.py', '2', 当前目录下所有文件名如't1_1.py', '3']

返回错误

Traceback (most recent call last):

File "calc.py", line 54, in

main(sys.argv)

File "calc.py", line 51, in main

calc(argv)

File "calc.py", line 16, in calc

bNum = float(bNum)

ValueError: could not convert string to float: backup_ver2.py

源码

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

import os

def calc(argv):

aNum = argv[1]

Opr = argv[2]

bNum = argv[3]

if '.' in aNum:

aNum = float(aNum)

else:

aNum = int(aNum)

if '.' in bNum:

bNum = float(bNum)

else:

bNum = int(bNum)

Opr = str(Opr)

if Opr == '+': res = aNum + bNum

elif Opr == '-': res = aNum - bNum

elif Opr == '*': res = aNum * bNum

elif Opr == '/': res = aNum / bNum

elif Opr == '%': res = aNum % bNum

elif Opr == '**' or Opr == '^':

res = aNum ** bNum

else:

print "Operator error: '%s'" % Opr

o2f(argv, res)

print res

def showres():

filename = open('calc', 'r')

fileread = filename.readlines()

for eachLine in fileread:

print eachLine,

filename.close()

def o2f(argv, res):

filename = open('calc', 'a')

filename.write(argv[1] + argv[2] + argv[3] + '=' + str(res) + os.linesep)

filename.close()

def main(argv):

'''useage:

print -- show all the result

example: 1 + 1 -- to get the result'''

if argv[1] == 'print':

showres()

else:

calc(argv)

if __name__ == '__main__':

main(sys.argv)

执行python calc.py 2 "*" 3

就可以了

想绕过转义的话就修改下程序以支持python calc.py 2 x 3

这样的用法好了

这不是python的问题,而是shell的问题。

例如cat *这个命令---cat的行为很单纯,只是从参数表获取文件列表,之后显示每个文件而已,而根本不会执行“列文件列表”这个自己责任之外的动作。

是shell先识别到了*,认为*是shell的通配符,由shell把*替换成文件列表,从而cat程序收到的只是文件列表。

你可以试试用python的subprocess模块去调用你的calc程序,没有了shell的干扰,保管正确。

所以你需要查一下你的shell下,如何去转义*字符,废掉shell将*视为通配符的行为。

忘了markdown要转义*字符,掉坑了!!!-_-#

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19835.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值