Python - 新手问题,示例文件中的语法无效
我正在自学Python,但在基础知识上已经遇到困难。
我正在按照一本书上的例子学习,第一道例子是这样的:
import sys
Zero = [' *** ',' * * ','* *','* *','* *',' * * ',' *** ']
One = [' * ',' ** ',' * ',' * ',' * ',' * ',' *** ']
Two = [' *** ',' * * ',' * * ',' * ',' * ',' * ',' ***** ']
Three = [' ***** ',' * ',' ** ',' * ',' * ',' * * ',' ** ']
Four = [' * ',' * ',' * ',' * ',' ******',' * ',' * ']
Five = [' ***** ',' * ',' **** ',' * ',' * ',' * * ',' *** ']
Six = [' * ',' * ',' * ',' **** ',' * * ',' * * ',' **** ']
Seven = [' ***** ',' * ',' * ',' * ',' * ',' * ',' * ']
Eight = [' *** ',' * * ',' * * ',' *** ',' * * ',' * * ',' *** ']
Nine = [' **** ',' * * ',' * * ',' **** ',' * ',' * ',' * ']
Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]
try:
digits = sys.argv[1]
row = 0
while row < 7:
line = ''
column = 0
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
line += digit[row] + ' '
column += 1
print(line)
row += 1
except IndexError:
print('usage: bigdigits.py <number>')
except ValueError as err:
print(err, 'in', digits)
当我运行bigdigits.py 1351355时,出现了一个错误,提示是SyntaxError: Invalid Syntax。我以为这可能和路径不对有关,我的程序路径是C:\py3eg。当我把它复制到C:\Python32路径下时,还是出现了同样的错误。我甚至从书的网站上下载了代码,结果还是有错误,所以代码显然是没问题的。
这本书是关于Python 3编程的,而我安装的是Python 3.2.1版本。
如果有人能告诉我为什么会出现这个错误,我会非常感激!
3 个回答
0
我在用Eclipse加上Pydev,Python版本是3.2.3。你的代码在Eclipse和IDLE中都能正常运行。关键是句子“except ValueError as err:”中的“as”这个词在你的开发环境里不是一个关键字,所以我觉得你应该把Python升级到更高的版本。
0
为了让代码更容易读懂,可以试试这种写法来定义数字零到九(不过这些名字如果改成“zero”到“nine”,或者甚至用“_0”到“_9”会更好——大写的名字留给类用,不要用在变量上):
Zero = """\
***
* *
* *
* *
* *
* *
*** """.splitlines()
编辑: 下面是一些分割和组合的技巧,用来定义你的数字:
digitparts = """\
*** | * | *** | ***** | * | ***** | * | ***** | *** | ****
* * | ** | * * | * | * | * | * | * | * * | * *
* *| * | * * | ** | * | **** | * | * | * * | * *
* *| * | * | * | * | * | **** | * | *** | ****
* *| * | * | * | ******| * | * * | * | * * | *
* * | * | * | * * | * | * * | * * | * | * * | *
*** | *** | ***** | ** | * | *** | **** | * | *** | * """.splitlines()
Digits = zip(*(s.split('|') for s in digitparts))
4
你的代码在Python 2.6及以上版本和3.x版本中是有效的。但是,在Python 2.5中会出现以下错误信息:
File "syntax-error.py", line 31
except ValueError as err:
^
SyntaxError: invalid syntax
这是因为Python 2.5不认识as
这个关键词。在2.5中,你应该用逗号来代替:
except ValueError, err:
请注意,这样做会让你的代码在Python 3.x中无法运行。
与其对你的代码进行修改以让它在老旧的2.5版本上运行,不如升级到更新的Python版本。