我有一个类的以下代码:
Activity.RESULT_CANCELED
然后我有另一个导入_Getch的类。在另一个类中,我尝试使用_Getch提供的read_key来处理条件:
class _Getch:
def __init__(self):
self.impl = _GetchWindows()
def read_key(self):
return self.impl()
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch()
当我尝试输入'a'时,我期待键为'a',但它返回b'a'而不是。因此,密钥不会满足任何条件,并将永远继续。为什么它会回归b'a'?我该怎么做才能让它返回'a'?
答案 0 :(得分:2)
根据documentation,msvcrt.getch()
会返回字节字符串。
因此,您需要在其上使用bytes.decode()
方法将其转换为unicode字符串。 提示:如果您执行此操作,则应查找环境编码并使用该环境而不是默认utf-8
。或者您可以使用errors='replace'
。
或者您可以将代码更改为与b'a'
进行比较。
N.B。:您的代码中存在语法错误;您应该在==
语句中使用if
(比较运算符)而不是=
(分配)。
答案 1 :(得分:0)
一种简单的方法是将解码调用链接在getch()之后:
import msvcrt
key = msvcrt.getch().decode('ASCII')
# 'key' now contains the ASCII representation of the input suited for easy comparison
if key == 'a':
# do a thing
elif key == 's':
# do another thing