我编写了一个 Python 脚本 (work.py),它在 Windows 中运行良好,但是当我在 Ubuntu 上运行它时,如果我输入名称作为细绳,但如果我输入名称作为整数一切運行良好。
名称错误:
thanapong@thanapong-Lenovo-C360:~/Desktop$ python work.py
Hours: 72
Minutes: 0
Seconds: 0
Enter the name: CHATCHAI
Traceback (most recent call last):
File "work.py", line 9, in <module>
look for = str(input("Enter the name: "))
File "<string>", line 1, in <module>
NameError: name 'CHATCHAI' is not defined
thanapong@thanapong-Lenovo-C360:~/Desktop$ python work.py
Hours: 72
Minutes: 0
Seconds: 0
Enter the name: BILLY
Traceback (most recent call last):
File "work.py", line 9, in <module>
look for = input("Enter the name: ")
File "<string>", line 1, in <module>
NameError: name 'BILLY' is not defined
使用 int 可以正常工作:
thanapong@thanapong-Lenovo-C360:~/Desktop$ python work.py
Hours: 72
Minutes: 0
Seconds: 0
Enter the name: 2
3
0
Not found
1
2
3
4
0
Not found
1
2
3
4
0
Not found
1
2
这是我的代码。
import pandas as pd
import time
hourz=input('Hours: ')
minz=input('Minutes: ')
secz=input('Seconds: ')
lookfor = input("Enter the name: ")
name = str(lookfor)
x = 5
print(' ')
hour=int(hourz)
min=int(minz)
sec=int(secz)
day = int(((hour*60*60)+(min*60)+(sec))/86400)
print(day)
for b in range(day):
for a in range(x):
time.sleep(1)
print(a)
if a == 0:
data = pd.read_csv("/media/thanapong/F91B-8B18/Customer_List.txt", header=0)
query = data.loc[data['NAME']==name]
if not query.empty:
print(query)
data.loc[data['NAME']==name, 'SCORE'] = (query.SCORE - 1)
print()
print(data.loc[data['NAME']==name])
data.to_csv("/media/thanapong/F91B-8B18/Customer_List.txt", index=None)
else:
print('Not found')
print(' ')
print(' ')
print("End")
这是 Customer_List.txt 的示例(它有很多行)。
ID,NAME,LASTNAME,SCORE,TEL,PASS
61070500216,CHATCHAI,KARUNA,22,123456789,12345
61070500217,BIGM,KORATBOY,15,123456789,123456789
答案1
到目前为止,在 Ubuntu 中,python
系统提供的命令始终是 Python 2,从来不是 Python 3,而对于 Python 3 必须使用python3
。
即使在未安装 Python 2 但安装了 Python 3 的系统上也是如此。较新的 Ubuntu 版本就是这样的,有命令python3
却没有python
命令。您可以安装python
元包,它会安装 Python 2。
较旧的 Ubuntu 版本安装的是 Python 2,而不是 Python 3。拉法说,您可以通过元包在这样的系统上安装 Python 3 python3
。
直到最近,python
还是 Python 2(而不是 Python 3)一直是类 Unix 操作系统的官方推荐。流行的 GNU/Linux 系统都遵循了这一建议,但 Arch Linux 及其衍生产品是个显著的例外,因为这些产品上python
早已安装了 Python 3。Debian 和 Ubuntu(Debian 的衍生产品)等系统至今仍在使用传统推荐的命名方案。
根据我的经验,其他一些操作系统(尤其是 Windows)的用户经常会对此感到惊讶。对于不太了解 Python 2 和 Python 3 之间区别的新手来说,这尤其令人困惑。
我的建议是:
始终了解(或找出)自己正在编写的是 Python 2 还是 Python 3。
可以特意编写同时起到这两种作用的代码,但是这样做的人知道他们在做什么,而这不是大多数人刚开始时会做的事情。
对于您运行的 Python 源代码文件(即脚本/程序,而不是仅可用作库的模块),使用 shebang 行启动文件,指定您想要哪个解释器。
对于 Python 3,你通常会希望使用
#!/usr/bin/env python3
,例如雷·巴特沃斯有评论。对于 Python 2,请考虑#!/usr/bin/env python2
。尽管你能#!/usr/bin/env python
在 Ubuntu 中使用,使用该python2
命令也受支持,使您的意思对人类来说更清晰,可以在更多操作系统上运行,并且可能在未来运行更长时间。
python
如果您通过将脚本名称作为参数传递给命令(如python2
)或 来运行脚本,则 shebang 行不会影响所使用的解释器。python3
相反,将脚本标记为可执行文件,以便您可以运行它:
chmod +x scriptname
您只需执行一次。然后您可以像这样运行脚本:
./scriptname
在 Windows 上,您可以使用py
launcher 命令运行脚本,除非您通过指定版本覆盖它,否则它会遵循您的 shebang 行。也就是说,如果您的脚本以 开头#!/usr/bin/env python2
,则在 Windows 中运行的效果与 相同,如果它以 开头,则在 Windows 中运行的效果与 相同。py scriptname
py -2 scriptname
#!/usr/bin/env python3
py scriptname
py -3 scriptname
但请注意,py
将python
(没有版本号) 视为指定 Python 3 而不是 Python 2。这是即使在 Ubuntu 中,如果您的 shebang 行末尾也考虑写入python2
(而不仅仅是python
) 的另一个原因;当使用启动器时,它使您的脚本更容易移植到 Windows py
。
至于你为什么得到那些当你无意中在 Python 2 解释器中运行 Python 3 代码时会出现错误:input
Python 3 中的函数只是读取并返回一行输入,这正是你想要的,但是input
Python2 中的函数读取一行输入,将其视为 Python 代码,运行该代码,并返回结果值。 这有相当令人担忧的安全隐患如果使用不当(即使在 Python 2 程序中),也只是这不是人们通常想做的事情。如果您需要用 Python 2 编写脚本,则可以使用raw_input
代替函数正如steeldriver所说,但真正的解决方案是使用python3
如上所述,尽管它的名字实际上是 Ubuntu 中的默认 Python 解释器. 像 这样的输入123
是 Python 表达式,但像 这样的输入则BILLY
不是,除非定义了某个同名变量;这就是数字输入恰好起作用的原因。
答案2
我运行了您的代码,它执行正确。我无法创建与图片中相同的错误。您的代码接受字符串作为名称字段的输入。Python 版本 3.7 和操作系统 Ubuntu。请参见下面的输出:
Hours: 72
Minutes: 0
Seconds: 0
Enter the name: BILLY
3
0
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
1
2
3
4
0
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
1
2
3
4
0
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
ID NAME LASTNAME SCORE ... KORATBOY 15 123456789.1 123456789.2
0 NaN BILLY NaN NaN ... NaN NaN NaN NaN
[1 rows x 16 columns]
1
2
3
4
End
Process finished with exit code 0
我认为解决方案是你需要python3
在命令提示符下使用不是 python
运行你的文件。你的代码显然是为了python3
如果你的系统上没有安装python3,你可以在终端中运行以下命令来安装它:
sudo apt install python3