1
Keyes Oct 9, 2019 好精巧的代码
|
2
wuwukai007 Oct 9, 2019 via Android request.POST 拿到的值不都是字符串么😂
|
3
Leigg Oct 9, 2019 via Android
…不得不说一句,机智!
|
4
beastk Oct 9, 2019 via iPhone
哈哈哈,你泄漏公司极密啦
|
5
Takamine Oct 9, 2019 isinstance : 你特么都这样了也不会想到我?
|
7
111111111111 Oct 9, 2019 via Android
@wuwukai007 大意了吧,get 方法有默认值,返回个 None 就尴尬了
|
8
yoshiyuki Oct 9, 2019
@wuwukai007 有些框架会自动进行数组的转化,PHP 里是这样的,python 强类型不太熟悉,不得而知
|
9
byfar Oct 9, 2019
我天,我怎么没想到还能这么检测!!!
|
10
noqwerty Oct 9, 2019 via Android
为了动态类型操碎了心😂
|
12
CLANNADHH OP |
16
lau52y Oct 9, 2019 via iPhone
每个人都会的,后来的人说前面的人,渐渐的发现自己也变成前人了^_^
|
18
Trim21 Oct 9, 2019 via iPhone
一时除了专门写个函数还真想不出其他办法来简便的做到同样的事情…
|
19
ClericPy Oct 9, 2019
取笑新手可不是个好习惯
|
24
ila Oct 9, 2019 via Android
类型检测不是应该 jsonschema 之类吗
|
25
hyserendipity Oct 10, 2019 via iPhone
cr 的重要性可见一斑。然而,绝大多数人由于工作太多,疏于提交 cr/帮别人 cr。
|
26
Winrey Oct 10, 2019
serializer 做错了什么,为什么放弃 serializer
|
27
no1xsyzy Oct 10, 2019
@Trim21 看具体需求可以 .get("a", "") 然后 if a and b and c and d 或者说 all((a,b,c,d))
当然,其实 dataclass + dacite 能够解决大多数这种问题了。 |
28
mamahaha Oct 10, 2019
我自己写代码也经常有很幼稚的 bug,我总感觉谁都有脑子短路的时候,所以看到别人代码有错都是提醒,心理上不敢去嘲笑。
是不是证明我还不太专业?专业人士不该出现幼稚的错误吧? |
29
secsilm Oct 10, 2019 via Android 这样写很机智啊,一起检查所有变量的类型。感觉离职的这位水平应该不错
|
30
sunulin Oct 10, 2019 via Android
快,修改下,再来吐槽
|
32
Allianzcortex Oct 10, 2019 via iPhone
marshmallow 就是应对这种情况
|
33
JerryCha Oct 10, 2019
学习了,真精巧
|
34
mskf Oct 10, 2019
如果很多参数的话这么做确实不错。。
|
35
bakabie Oct 10, 2019 via Android
有一说一,好歹是能用的(
|
36
tonnycao Oct 10, 2019
为什么不用 isinstance 我是主攻 PHP 的
|
37
Eleflea Oct 10, 2019
我觉得这样做没什么问题。Python 的 try...except 不仅是用来处理错误的。参见 fluent python P449.
In Python, try/except is commonly used for control flow, and not just for error han‐ dling. There’s even an acronym/slogan for that documented in the official Python glos‐ sary: EAFP Easier to ask for forgiveness than permission. This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the as‐ sumption proves false. This clean and fast style is characterized by the presence of many try and except statements. The technique contrasts with the LBYL style com‐ mon to many other languages such as C. |
38
jinhao7773 Oct 10, 2019
参考 https://docs.djangoproject.com/en/2.2/ref/request-response/#django.http.QueryDict.get
如果没有传过来对应的参数,是会有 None 的,人家一行代码就检查了 4 个参数是否都有传值,挺厉害的技巧啊。 |
39
hanxiaomeng Oct 10, 2019
精巧,思路瞬间开阔了
|
40
lihongjie0209 Oct 10, 2019
就不能这么写吗?
try: a = request.post.getAsString("a") b = request.post.getAsString("b") c = request.post.getAsString("c") d = request.post.getAsString("d") catch: // 异常逻辑 自己扩展一下或者是写一个工具类都可以啊。 没看懂这种表意不明的写法有什么好推荐的 |
41
richzhu Oct 10, 2019
哈哈哈哈哈哈😂曰:“有什么问题吗?又不是不能用” (:dog
|
42
lan2e Oct 10, 2019
学到一招,不得不说这哥们 6p 啊
|
43
hellwys1 Oct 10, 2019
我真没觉得这代码有问题……
|
44
dog82 Oct 10, 2019
这样写比较取巧,对性能又没啥影响
|
45
wliansheng Oct 10, 2019
可以用 serializer 啊。直接类型检查和 format 各种处理,
|
47
ganbuliao Oct 10, 2019
这段代码 再加个注释 就完美了 ^_^
|
48
fml87 Oct 10, 2019
a, b, c, d = map(request.post.get, ["a", "b", "c", "d"])
assert all(isinstance(x, str) for x in [a, b, c, d]), "not str" 其实感觉用 isinstance 可读性没有 a+b+c+d 好。。 |
49
ddzzhen Oct 10, 2019 via Android
奇才
|
50
v3xe Oct 10, 2019 via iPhone 降低可读性,稳固职场地位。
|
51
Levi233 Oct 10, 2019 先不说你同事用取巧的方式写代码,你连这段代码都看不懂,你不觉得你自己问题更大吗?还发出来取笑别人,无语了。
|
52
UserNameisNull Oct 10, 2019
精辟。巧妙,学习了。
|
54
mengzhuo Oct 10, 2019 via iPhone
可以啊,但是不判空么
|
55
Vegetable Oct 10, 2019
少了一段注释,这哥们是个小机灵鬼!
|
56
simonhunter Oct 10, 2019
请教一下,话说这样写要怎么判断 abcd 中哪个不是字符串需要重新获取或异常处理呢……在 except 里面再一个个去排查吗?
|
57
dwggrv Oct 10, 2019
妙啊~
|
58
houzhimeng Oct 10, 2019
挺有意思的,不错
|
59
wersonliu9527 Oct 10, 2019
之前在别人 js 代码里面见过
function sbtString(s1, s2) { var ous = ""; s1 += ""; s2 += ""; for (var i = 1; i <= s1.length; i++) { var c1 = s1.substring(i - 1, i); var c2 = s2.indexOf(c1); if (c2 == -1) { ous += c1; } } return ous; } |
60
Levi233 Oct 10, 2019
@simonhunter 如果 abcd 里面有变量不是字符串,用+号拼接会报错,因为+号只能拼接字符串类型的变量,有别的类型的变量拼接出来会报错,python 是动态强类型语言。
|
61
Levi233 Oct 10, 2019
@simonhunter 额。。看错你的问题了不好意思
|
62
oahebky Oct 10, 2019
如果是希望 a, b, c, d 都存在值,post 的时候这四个都要有,那下面这个做法不好吗?
try: (游标卡尺占位)a = request.post["a"] (游标卡尺占位)b = request.post["b"] (游标卡尺占位)c = request.post["c"] (游标卡尺占位)d = request.post["d"] except: (游标卡尺占位)# ... 写个 a+b+c+d+"" 不是很奇怪吗? |
63
Trim21 Oct 10, 2019 via Android
@simonhunter 看这个写法大胆猜测一下大概是不需要判断到底 abcd 哪个是空的,直接返回请求错误就行了。
|
64
haon Oct 10, 2019
我也这样写过...
|
65
lrxiao Oct 10, 2019
__add__(
|
66
45HXlKzal6W56zUJ Oct 10, 2019
@lihongjie0209 #40 你确定你用过 django?
|
67
tabris17 Oct 10, 2019
@wuwukai007 也可能是 None
|
69
lihongjie0209 Oct 10, 2019
|
70
EdwardLeeJan Oct 10, 2019
你不是应该高兴么,毕竟他要离职了
|
71
babedoll Oct 10, 2019
妙啊~
|
72
fuxiuyin Oct 10, 2019
其实还好,不想改的话加句注释。他可能是不太清楚 HTTP 要求所有数据都以字符串发送,所以解出来也都是字符串,就算是真用 request.post(url, data={'a': True})传过去也是'True',所以不用担心会是其他类型,只可能是有这个参数或者没这个参数。所以不想改的话就打个注释留着,改的话就改成
try: a = request.POST['a'] .... 就行了 |
73
cyrbuzz Oct 10, 2019 楼主头像是为了契合这代码换的?
|
74
dasabi Oct 12, 2019 via Android
之前 python 里面用过这种方法,比较取巧但是难登大雅之堂。你的同事 python 至少有一年经验
|
75
songkai Oct 18, 2019
未来的美团外卖人员!
|