鱼C论坛

 找回密码
 立即注册
查看: 160|回复: 11

[已解决]PyCharm 第一行代码的断点被忽略的问题

[复制链接]
发表于 2021-9-9 23:09:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 阳间祝福 于 2021-9-10 13:24 编辑

大家好,我在用 PyCharm 社区版 debug 程序的时候发现了一个现象:如果我代码前面只有以 # balabala 形式做的注释,那么我在第一行可执行的代码处下断点、debug 后,程序直接跑完了,得下在第二行及以后才会停。比如下面的代码
  1. # 随便一个注释

  2. a = 10
  3. print(a)
复制代码

这里如果断点下在 "a = 10" 这一行,则程序 debug 的时候不会停,如图(下在后面行则会停)。

只有# 型注释, 断点在第一行

只有# 型注释, 断点在第一行




神奇的是,如果我在前面再加上以 """ balabala """ 形式做的注释,那么断点下在第一行可执行的代码处、并 debug 时, 程序停了。比如如下的代码
  1. # 随便一个注释
  2. """
  3. 这种的注释
  4. """
  5. a = 10
  6. print(a)
复制代码

这里如果断点下在 "a = 10" 这一行,则程序 debug 的时候就停了,如图。

有""" """型注释, 断点在第一行

有""" """型注释, 断点在第一行


经测试,头部没有注释,则可以停;头部只有""" """型注释,也可以停;头部有 """ """ 以及 # 型注释,也可以停,且跟两种注释的先后顺序无关,就好像只要有""" """ 型注释,程序就不会忽略第一行断点。

我的问题是:这种现象的原因是什么啊?这是 PyCharm 的 bug 吗?


谢谢大家了!
最佳答案
2021-9-10 12:04:16
我发现如果 a=10 是第一行代码,前面没有其他需要执行的代码,那断点就不生效
我猜应该是BUG
解决办法:
1. 把 a=10 前面所有非代码行都去掉
2. 在 a=10 前面增加代码(你在前面增加三引号括起来的字符串就属于这个)
3. 把 a=10 和 print都打上断点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-10 10:44:52 | 显示全部楼层
我这里前面加不加#或"""""",第一个代码是a=10都正常在断点停。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-10 11:40:14 | 显示全部楼层
嗯.. 我的也是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-10 11:58:09 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-10 12:12 编辑

我大概知道你想問什麼,"""abc""" 形式註解還有其他功能,比如:調用 __doc__,當其他地方調用此函數/模塊時,想知道這函數/模塊註解/信息,print(myModule.__doc__) 可打印此註解/信息。

1. 簡單說就如樓主你的圖片顯示文件名稱是 main.py
2. 在上面你試試寫入 """我是大帥哥"""
3. 然後你試試另外再創建一個文件名稱main2.py(名稱隨意,但切記必須以main.py同個文件地址)
4. 你在main2.py裡面 import main
5. 然後 print(main.__doc__)試試

main.py

main.py

main2.py

main2.py
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-10 12:04:16 | 显示全部楼层    本楼为最佳答案   
我发现如果 a=10 是第一行代码,前面没有其他需要执行的代码,那断点就不生效
我猜应该是BUG
解决办法:
1. 把 a=10 前面所有非代码行都去掉
2. 在 a=10 前面增加代码(你在前面增加三引号括起来的字符串就属于这个)
3. 把 a=10 和 print都打上断点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2021-9-10 13:21:50 | 显示全部楼层
hrpzcf 发表于 2021-9-10 12:04
我发现如果 a=10 是第一行代码,前面没有其他需要执行的代码,那断点就不生效
我猜应该是BUG
解决办法:
...

谢谢回答!

哎我发现,我的 PyCharm 里如果 a = 10 是第一行代码,前面没有其他的东西,断点却是生效的……

针对您提出的解决方法:
1. 这个我试了试是可以的,谢谢!
2. 前面用 """ """ 进行注释是可以的。但我又有些问题:为什么 """ """ 型注释加在前面就没事,但如果是 # 型注释就出事了?有什么资料详细介绍这些加注释方法之间的细微区别吗?
3. 断点下在第二行及以后都是能停下来的。

所以我暂时得出的结论是:以后在代码前面写注释的话,尽量用 """ """ 型。

谢谢您的回答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2021-9-10 13:26:36 | 显示全部楼层
suchocolate 发表于 2021-9-10 10:44
我这里前面加不加#或"""""",第一个代码是a=10都正常在断点停。

请问您用的是不是 PyCharm 社区版啊?也有可能是我自己这个有点问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2021-9-10 13:32:43 | 显示全部楼层
傻眼貓咪 发表于 2021-9-10 11:58
我大概知道你想問什麼,"""abc""" 形式註解還有其他功能,比如:調用 __doc__,當其他地方調用此函數/模塊 ...

谢谢您的回答!

我相信您的回答可以解释这样一件事:""" """ 形式的注释跟 # 形式的注释是有大区别的,而这可能就导致了上述现象。但是我才学Python两天……还看不太懂。。。比如 "__doc__" 之类的……我会尽快学到能看懂您发的这些的程度!

有啥这方面的资料推荐吗?还是说正常学 Python 到后面就会明白了?

谢谢!



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-10 21:01:04 From FishC Mobile | 显示全部楼层
阳间祝福 发表于 2021-9-10 13:21
谢谢回答!

哎我发现,我的 PyCharm 里如果 a = 10 是第一行代码,前面没有其他的东西,断点却是生效 ...

三引号不是注释,是字符串,比普通字符串多和个特性就是三引号之间允许换行,它在运行的时候是要被执行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2021-9-10 22:43:20 | 显示全部楼层
问题总结:

在参考了4楼和9楼的回答后,我查到了这个网站:https://www.geeksforgeeks.org/triple-quotes-in-python/
里面介绍了 """ """ 的作用,其中特别提醒了下面这句话:
Note: Triple quotes, according to official Python documentation are docstrings, or multi-line docstrings and are not considered comments. Anything inside triple quotes is read by the interpreter. When the interpreter encounters the hash symbol, it ignores everything after that. That is what a comment is defined to be.

大致是说,""" """ 和 ''' ''' 这种三引号,属于 docstrings,且不能被认为是注释(comments),括起来的内容会被解释器读取!这一点与5楼(最佳答案)提到的解决方案第2条一致。当然那个网站的文章里还介绍了一下怎么把 """ string""" 当成字符串来使用,大家有兴趣的可以看一看。

至此,现象应该更新成:代码前面如果没有 # 型注释,则代码能在第一行代码的断点处停下(这点我在我的 PyCharm 社区版里是这个情况,与5楼的第一句话的结论有点出入,可能还跟电脑、PyCharm等有关?);如果有 # 型注释,则代码就忽略了第一行代码的断点。

这个问题感觉在实际情况下不太会出现,毕竟不太可能直接只在代码第一行下个断点就不管了,所以我暂时不再纠结这个问题了。

再次感谢大家的回答!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-13 19:16:47 | 显示全部楼层
学会了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-9-15 18:44:47 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2021-9-26 18:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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