鱼C论坛

 找回密码
 立即注册
查看: 2032|回复: 7

python文件打开的问题

[复制链接]
发表于 2023-6-7 14:18:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么在python3.10版本的shell中打不开文件?

具体来说,就是同样的代码,在shell中就报错,在文件模式下就能正常运行。

                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-7 17:39:09 | 显示全部楼层
在Python Shell中运行文件打开代码时,可能出现错误的原因有几个可能性:

1. 文件路径问题:如果你在Python Shell中运行的代码中直接使用了相对路径打开文件,可能导致出错。Python Shell的工作目录可能与你的Python脚本的目录不同。你可以使用  os.getcwd()  命令查看当前工作目录,使用  os.chdir(path)  更改工作目录,或者在代码中使用绝对路径打开文件。

2. 文件权限问题:如果你试图打开的文件没有正确的读取权限,也会导致打开文件失败。你可以检查文件的权限,或者尝试以管理员身份运行Python Shell。

3. 环境问题:Python Shell的环境可能与你运行Python脚本的环境有所不同。例如,Python Shell可能在一个虚拟环境中运行,而Python脚本则在系统Python环境中运行。

你需要查看Python Shell中的错误信息来确定具体问题。如果你提供更多的错误信息或者代码,我可能能够提供更准确的建议。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-9 17:11:17 | 显示全部楼层
isdkz 发表于 2023-6-7 17:39
在Python Shell中运行文件打开代码时,可能出现错误的原因有几个可能性:

1. 文件路径问题:如果你在Pyt ...

谢谢大佬 借此机会我还想再问另一个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-9 17:16:57 | 显示全部楼层
korla 发表于 2023-6-9 17:11
谢谢大佬 借此机会我还想再问另一个问题

在链式赋值语句中,为什么x=y=z=a+b可能与下面三个赋值语句x=a+b,y=a+b,z=a+b不等价?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-9 17:19:48 | 显示全部楼层
korla 发表于 2023-6-9 17:16
在链式赋值语句中,为什么x=y=z=a+b可能与下面三个赋值语句x=a+b,y=a+b,z=a+b不等价?

在 Python 语言中,链式赋值语句  x=y=z=a+b  和分别赋值的语句  x=a+b , y=a+b , z=a+b  在绝大多数情况下是等价的。这两种赋值方式的结果都是:将  a + b  的结果分别赋值给  x ,  y  和  z 。

但是,如果  a  或  b  在进行加法操作( a+b )时的状态发生改变,那么两种赋值方式的结果可能会不同。

例如,假设  a  和  b  是类实例,其中  a  的  __add__  方法被重载,使其在每次加法操作时修改自身的状态。那么  x=a+b , y=a+b , z=a+b  将执行三次加法操作,可能导致  a  的状态改变三次。而  x=y=z=a+b  只执行一次加法操作, a  的状态只会改变一次。

所以,除非  a  和  b  在加法操作中的状态有可能改变,否则,这两种赋值方式在 Python 中是等价的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-9 17:33:34 | 显示全部楼层
好吧 谢谢大佬 这好像已经涉及到类的知识范围了 显然是我当前无法完全掌握的
还是很感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-9 18:06:06 | 显示全部楼层
isdkz 发表于 2023-6-9 17:19
在 Python 语言中,链式赋值语句  x=y=z=a+b  和分别赋值的语句  x=a+b , y=a+b , z=a+b  在绝大多数情况 ...

x=[1,2,3,4,4]
y=x
x is y
True
x1=[1,2,3,4,4]
x1 is x
False
x is y
True
a=3
b=3
a is b
True
你看,当对象是列表时,尽管列表内容都一样,但是变量x1和x的id却不一样,可当对象是数值型时,a和b的id却又是一样的:同样的操作,只是对象类型不一样,为什么会有不同的结果?
这种情况和您刚才说的__add__重载好像又不一样
我晕了TAT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-9 18:13:44 | 显示全部楼层
korla 发表于 2023-6-9 18:06
x=[1,2,3,4,4]
y=x
x is y

这个问题涉及到 Python 中的对象创建和赋值的概念。

当你创建一个列表  x=[1,2,3,4,4] ,Python 在内存中创建了一个新的列表对象,并将  x  指向它。当你执行  y=x ,Python 并没有创建新的列表对象,只是创建了一个新的引用  y ,并且让  y  和  x  都指向同一个列表对象。这就是为什么当你执行  x is y  时返回  True ,因为  is  操作符检查的是两个引用是否指向同一个对象。

然后,当你再次创建一个列表  x1=[1,2,3,4,4] ,尽管这个列表的内容和  x  或  y  指向的列表的内容相同,但 Python 仍然会在内存中创建一个新的列表对象,并让  x1  指向它。这就是为什么  x1 is x  返回  False ,因为它们指向的是两个不同的对象。

至于  a=3  和  b=3 ,在 Python 中,一些小的整数和字符串等不可变类型在解释器启动时就会被预先分配,当你使用这些值时,Python 仅仅是创建了一个引用,指向已经存在的对象,而不是创建一个新的对象。所以, a  和  b  实际上都是指向同一个  3  对象,这就是为什么  a is b  返回  True  的原因。

希望这个解释能帮助你理解 Python 中的对象和赋值的行为。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-12 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表