Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌应用程序引擎和string.translate不';行不通_Python_Google App Engine - Fatal编程技术网

Python 谷歌应用程序引擎和string.translate不';行不通

Python 谷歌应用程序引擎和string.translate不';行不通,python,google-app-engine,Python,Google App Engine,我正在写一些简单的脚本来翻译rot13的文本。因此,在适当的类别中,我有: def post(self): dict = string.maketrans("ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm") code = self.request.get("text") code = string.translate(co

我正在写一些简单的脚本来翻译rot13的文本。因此,在适当的类别中,我有:

def post(self): 
dict = string.maketrans("ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")

code = self.request.get("text")
code = string.translate(code, dict)
它可以很好地获取参数“text”,但在转换时会出现内部服务器错误:

      File "<mypath>\main.py", line 46, in post
    code = string.translate(code, dict)
  File "C:\Python27\lib\string.py", line 498, in translate
    return s.translate(table + s[:0])
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 128: ordinal not in range(128)
文件“\main.py”,第46行,在post中
code=string.translate(代码,dict)
翻译文件“C:\Python27\lib\string.py”,第498行
返回s.translate(表+s[:0])
UnicodeDecodeError:“ascii”编解码器无法解码位置128处的字节0x80:序号不在范围(128)内
我的代码怎么了

a = "This is a string".encode("rot13")
b = a.decode("rot13")
print b
它的巨蟒;它正是你想要的

Unicode版本的translate需要来自Unicode的映射 序数(您可以使用ord检索单个字符) Unicode序数。如果要删除字符,请映射为“无”

我改变了你的函数来建立一个dict映射每个 要转换为的字符的序号:

def translate_non_alphanumerics(to_translate, translate_to=u'_'):
    not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
    translate_table = dict((ord(char), translate_to) for char in not_letters_or_digits)
    return to_translate.translate(translate_table)

>>> translate_non_alphanumerics(u'<foo>!') u'_foo__'
def translate_非字母数字(to_translate,translate_to=u''):
不是字母或数字=u'!"#%\'()*+,-./:;?@[\]^_`{|}~'
translate_table=dict((ord(char),translate_to)表示非字母或数字形式的字符)
返回到_translate.translate(translate_表)
>>>翻译非字母数字(u'!')u''u foo''
编辑:翻译映射必须从Unicode序号映射 (通过ord)到另一个Unicode序号、Unicode字符串或无 (删除)。因此,我将translate_的默认值更改为 必须是Unicode文本。例如:

>>> translate_non_alphanumerics(u'<foo>!', u'bad') u'badfoobadbad'
>>翻译非字母数字(u'!',u'bad')u'badfoobadbad'

哈哈,谢谢,这就是我喜欢学习Python的原因,很快它就可以洗碗了:D然而,我很好奇为什么我上面的代码不起作用,对我来说似乎很好。@Straightfw小心带翻译功能的str和unicode字符串:别担心,我总是这样:)据我所知,这对Python 3不起作用。有更好的方法来处理D吗o比这更重要吗?Fwiw,'repr'修复了我同样的问题,没有外部函数等。这可能更简单更好。;-)这纯粹是Python问题-与App Engine无关。此外,
dict
对于变量来说是一个非常糟糕的名称,因为它也是内置类型的名称。