When Your Computer Answer 'Error' 写代码遇到报错怎么办?

反正只要开始编程, 你就会遇到报错, 无数无数多的报错, 每天几个到几十个.

遇到一个, 恩, 之前在官方文档好像看过的, 去查查文档和代码示例, 再看看上下文, 好, 解决了, 超lucky.

下一个, 英文 google 一下, 有人问过, 有人解答, 照抄答案, 还是对的, 超超 lucky.

下一个, google 没有, 到官方库的 github 中查查 issue, 看有没有类似的, 有解答, 照抄答案, 还是对的, 超超超 lucky.

再下一个, 英文 google 没有人问过, 或者 回答的人太少, 比如, ‘文本替换’, 这个问题, 只有两个相关的 Stack Overflow, 而且, 只有一两个回答和一两个点赞. 好了, 你检索的问题, 是个傻瓜问题, 你跑偏了. 你用的库和工具大家都在用, 你遇到的问题, 如果真的是问题, 前面至少应该几十个人遇到才对. 这时, 你需要换个问题了, 不是简单的把问题换个形式问问, 而是, 从源头上捋捋, 看看自己的问题是不是真的出在这个阶段?

捋完还是不知道问题在哪里. 对于起步不久的编程新手来说, 编程套路”深”, 知识都是好多层的, 这个问题出在哪一层? 在哪一层解决更好? 分多少层, 每层有什么, 代码的格式, 常用的库, 皆是套路. 你也不知道哪些大家都知道而你不知道的知识.这时候, 你能做的, 就是展示事实, 过程, 把你的思路和框架展示给他人知道, 让别人帮你看看, 问题出在哪里.

当然最好的是把你的思路随时记下来,走一步记一步, 但有时候这个很难实现, 因为太多层,因为越往下面, 碎的东西越多. 遇到问题写个 issue, 是折中的办法.

  • 大妈推荐提问模板:

    • 俺环境怎么样
    • 运行时,环境依赖什么软件,怎么安装
    • 俺问题复现的过程
    • 俺的分析
    • 俺的尝试
    • 俺现在的设想
    • 你怎么看?

issue 里不要说别人的库或框架或函式有错误, 那些成熟的库有太多人把玩过了, 错的一定是你. 不要到 Stack Overflow 里发, 如前, 如果里面没有现成的, 说明你跑偏了. 也不要轻易到官方库的issue 里提问题, 开源项目维护很辛苦的.

好, issue 到底要发到哪里嘛? 诶, 我是发给怼圈, 不过大妈和怼友们也都很忙啊, 你这样随便发一个 issue 真的好嘛? 可是这个问题会有跟我差不多的人遇到呀. 好, 抱着共同学习成长的心态和目的, 你这个 issue 就发对地方了. 如果你没有怼圈这么高大上, 又有老师又有同学的地方, 那就…那就找一个或自己搭吧. 不过, 在发出 issue 之前或之后的一天内, 你的大脑应该会帮你解决这个问题的, 试试看~

关联

举例

  • 傻瓜问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 目标
- 写出了一个关于频率的脚本(lghSumFrequency.py), 输出为' sport everyday'/' n days didn't sport last week'
- 希望将输出的内容 更新到 脚本(lghSumType.py) 中的 t1 = pretext""" """ 放在这三个分号里.
- 尝试
- replace
with open('try.py', 'r+') as f:
lines = [line.replace('_','everyday last week')
if 't1' in line else line
for line in f]
f.seek(0)
f.truncate()
f.writelines(lines)
- 这个只能用一次, 因为每次要被替换的部分, 内容都是不同的.
- 而且新的内容每次也不同.
- 每次 删掉 t1 = pretext""" """ 中的内容, 然后再写入? 这样的话如何标会 pretext""" """ ?
- 问题
+ 如何替换文件特定位置的内容?
+ 有哪些知识需要补充?

大妈提点

你的希望 本身都没有经过认真的考虑
提问是讨论, 而不是限制对方只能在自己的技术方案中来补完
第一印象, 只是一个函式提纯的重构问题
你非要直接怼到文本替换上
本身就不是一个问题解决的讨论
而是一个不知道哪儿来的解决思路的补救
这样等于先否认了其它可能性
要求大家必须来完成自己蜜汁创意

提问正确姿势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
## 背景
- 没有搭建网页知识
- 无需在公网另行搭建网页
## 目标思路及尝试
- 目标: 网页版的时间报告, 内含 图片和 文字
- 在 jupyter notebook里, 用 matplotlib 生成的图片和结果无法批量导出为 html.
- 尝试过将 .ipynb 直接导出 html格式, 并在blog 中展示, 问题, 一是不能只导出 output 的结果, 一并显示很多代码. 而是排版不好看.
- bokeh 框架, 可以直接导出 图片到 html,
- 可以将不同的图片按照 坐标的方式排版.
- 可在网页中同时嵌入widget, 包括 按钮/文字 等.
- 但是widget 中嵌入的文字, 一个是纯文本, 一个是 div = ''' < > ''' 遵循 html 的语法
- 我要嵌入widget 的文字是, 一个函式的导出结果.
- 我想到的解决方案是:[将导出结果替换到widget 的文本](https://github.com/DebugUself/du4proto/issues/294)
- 有无其他更好方案么?
代码如下:
''' sum = 0 / sum = n, n is not sport last week'''
if (yu.sum(axis = 0)<=0)[-1:].values == True:
print ('sport everyday')
else:
print (yu.sum(axis = 0)[-1:])
print ("days didn't sport last week")
希望将print 后的内容放到如下代码中:
...
t2 = PreText(text="""
sport everyday.
""",
width=WIDTH, height=100,)
grid = gridplot([[widgetbox(t0)],[pt],[widgetbox(t1)], [po],[widgetbox(t2)],[pi,None],[ps,None],[pf,None],[ph,None]])
show(grid)
## 问题
以上 ''' ''' 只能添加纯文本.
## 解决
等等, 如果连 ''' ''' 也一并列入上一个脚本的输出结果呢?
比如 preText = 脚本1, 这样, 要把脚本1先变成 function, 取名 fsport
preText = function
报错: 期待的是 str
那就改成 str, str(fsport)
返回空白
改成 str(fsport(cvsf)) 跟 def的一致, 居然就可以了.

期待没有报错的那一天~~