說(shuō)起 Python 強(qiáng)大的地方俱萍,你可能想到是它的優(yōu)雅端壳、簡(jiǎn)潔、開(kāi)發(fā)速度快枪蘑,社區(qū)活躍度高损谦。但真正使得這門(mén)語(yǔ)言經(jīng)久不衰的一個(gè)重要原因是它的無(wú)所不能岖免,因?yàn)樯鐓^(qū)有各種各樣的第三庫(kù),使得我們用Python實(shí)現(xiàn)一個(gè)東西實(shí)在是太簡(jiǎn)單了成翩,你經(jīng)常會(huì)看到幾行代碼實(shí)現(xiàn)爬蟲(chóng)觅捆,10行代碼實(shí)現(xiàn)人臉識(shí)別,雖然有些夸張麻敌,但確實(shí)就是有這樣的庫(kù)幫你把所有的繁文縟節(jié)全部封裝了栅炒,最后給你開(kāi)放一個(gè)優(yōu)雅的 API。
今天給你推薦的這個(gè)庫(kù)叫 “FuckIt.py”术羔,名字一看就是很黃很暴力的那種赢赊,作者是這樣介紹它的:
FuckIt.py uses state-of-the-art technology to make sure your Python code runs whether it has any right to or not. Some code has an error? Fuck it.
FuckIt.py 使用了最先進(jìn)的技術(shù)能夠使你的代碼不管里面有什么樣的錯(cuò)誤,你只管 FuckIt级历,程序就能“正呈鸵疲”執(zhí)行,兵來(lái)將擋水來(lái)土掩寥殖。
還是先來(lái)看個(gè)例子怎么使用的吧玩讳。
安裝
pip install fuckit
假設(shè)有一個(gè)目標(biāo)文件: broke.py
def f():
broken_code
print('fuckit chaining works')
for
let's just assume this is a big module of shitty code.
x = y
y = x
1 / 0 # Oh shhhiiiiiii
var = "Are you proud of what you've done?"
broke.py 中有幾處明顯的錯(cuò)誤,包括語(yǔ)法錯(cuò)誤嚼贡,變量 broken_code 沒(méi)有被定義熏纯,還有0當(dāng)作被除數(shù)。
如果直接 import broke 肯定會(huì)報(bào)錯(cuò)
>>> import broke
File "broke.py", line 5
for
^
SyntaxError: invalid syntax
這時(shí)你可以使用 fuckit 將 broke 導(dǎo)入進(jìn)來(lái)粤策。
>>> import fuckit
>>> fuckit("broke")
>>> broke
調(diào)用函數(shù) f 的時(shí)候也會(huì)報(bào)錯(cuò)
>>> broke.f()
NameError: global name 'broken_code' is not defined
你可以使用鏈?zhǔn)?fuckit 來(lái)調(diào)用這個(gè)有問(wèn)題的函數(shù)
>>> fuckit(broke).f()
fuckit chaining works
或者
>>> fuckit(fuckit("broke")).f()
fuckit chaining works
除此之外樟澜,fuckit 還可以作為裝飾器和上下文管理器來(lái)使用。
裝飾函數(shù)
>>> @fuckit
... def broken_function():
... non_existant_variable # Let's create a NameError
... return 'Function decorator works'
...
>>> print(broken_function())
None
裝飾類(lèi)
>>> @fuckit
... class BrokenClass(object):
... def f(self):
... self.black_hole = 1 / 0
... return 'Class decorator works'
...
>>> print(BrokenClass().f())
None
上下文管理器
>>> with fuckit:
... print('Context manager works')
... raise RuntimeError()
...
等價(jià)于
try:
print('Context manager works')
except RuntimeError:
pass
看到這里叮盘,是不是感覺(jué) fuckit 很暴力秩贰,那么它能用在什么場(chǎng)景?個(gè)人認(rèn)為這個(gè)庫(kù)很雞肋柔吼,因?yàn)槟愕拇a不應(yīng)該容忍這些錯(cuò)誤的出現(xiàn)毒费,如果出現(xiàn)了錯(cuò)誤應(yīng)該立馬修復(fù)才是,但有一種可能的使用場(chǎng)景是你剛接手一份超復(fù)雜的代碼愈魏,里面各種看不懂的代碼蝗罗,而這些操蛋的代碼時(shí)不時(shí)出現(xiàn)一個(gè)錯(cuò)誤,而你又沒(méi)法駕馭它的時(shí)候蝌戒,你就用 fuckit 吧串塑。