Python中的非ASCII字符错误

4

我是一名初学者,正在尝试编写一个生成随机密码的Python脚本。然而,即使我在代码中声明了#utf-8编码,仍然会出现非ASCII字符错误,就像Stack Overflow上的另一个类似问题所提到的那样。这是源代码:

import string
import random
#coding: utf-8
print "Password generator will create a random customizable password."
print "Choose your options wisely."
number = int(input("How many letters do you want in your password?"))
caps = str(input("Do you want capital letters in your password? Y/N"))
symbols = str(input( "Do you want punctuation, numbers and other symbols in your password? Y/N"))
punctuation = ("!", ".", ":", ";", ",", "?", "'", "@", "£", "$", "«", "»", "~", "^","%", "#", "&", "/", range(0, 11))
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
if caps == "N":
    characters = lowercase
else:
    characters = uppercase + lowercase
if symbols == "Y":
    characters += punctuation
password = random.sample(characters, number)
print "The password is", password "."

这是终端输出: pedro@pedro-Inspiron-3521:~/Desktop$ python passwordgenerator.py
文件“passwordgenerator.py”,第9行 语法错误:文件passwordgenerator.py中的非ASCII字符“\xc2”,但没有声明编码;请参见http://www.python.org/peps/pep-0263.html了解详情。
我查看了链接,但无法理解其中的内容,可能是因为我不是以英语为母语的人,而且我刚开始学习编程。提前感谢您的帮助。

在Python 2.7中,使用raw_input()而不是input()。后者会评估其输入,即它的工作方式类似于eval(raw_input()) - jfs
3个回答

5

为允许非ASCII字符,#coding: utf-8这一行需要位于文件顶部。

£«» 不是ASCII字符。

虽然您可能不希望密码中存在非ASCII字符,并且大多数网站都不允许它们,但理论上它们是可以被允许的。


2

你的标点符号列表中包含了>><<符号。

这些符号是无效的。尝试查找它们的Unicode代码。

http://www.fileformat.info/info/unicode/char/bb/index.htm http://www.fileformat.info/info/unicode/char/ab/index.htm

编辑: 哦,等等,这是一个密码生成器,所以甚至不要将双尖括号作为标点符号列表的一部分,因为这些在任何密码中都是无效的。

punctuation = ("!", ".", ":", ";", ",", "?", "'", "@", "$", "~", "^", "%", "#", "&", "/", range(0, 11))

此外,为什么要将数字添加到标点符号元组中呢?为什么不直接使用string.punctuation和string.digits呢?

尝试不使用英镑符号 - DevLounge
抱歉,因为最后一条评论里的字符已经达到上限了,所以看起来有点凌乱。我认为这个错误是一个异常或者什么的。然而,我从未编写过处理异常的代码。这类似于 try ..... finally,对吧? - chilliefiber
尝试使用raw_input而不是input来查看它是否有效。 - DevLounge
1
回答你的问题,我不知道什么是数字,也不知道string.punctuation和string.digits会做什么。不过,我一定会去搜索一下。谢谢,善良的陌生人。 - chilliefiber
1
抱歉 @agf 和 Apero,无法为你们的回答点赞,尝试了一下,但它说投票需要15个声望 :( - chilliefiber
显示剩余9条评论

0

如果您使用的是Mac电脑,在读取文件夹内容时会出现ASCII错误,这是由于存在名为.DS_STORE的文件引起的。

因此,如果您正在使用Mac,请执行以下操作:

  • 删除所有.DS_STORE文件

  • 选择“应用程序”>“实用工具”来启动终端。

  • 输入以下UNIX命令:

  • sudo find / -name ".DS_Store" -depth -exec rm {} \;

  • 当提示输入密码时,请输入您的Mac OS X管理员密码。


虽然这是一个好的答案并且可能是正确的,但在 Mac 上更可能的原因是从编辑器复制到终端,导致前导空格不友好于 Python。只需替换前导空格即可解决问题。 - David Hoelzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接