推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
laoyuan
V2EX  ›  Python

Python 里 try... except 要是能写成一行流就好了

  •  
  •   laoyuan ·
    laoyuan · Jul 1, 2015 · 6803 views
    This topic created in 3978 days ago, the information mentioned may be changed or developed.
    像这样,多安逸
    url_no_scheme = try url.split('://', 1)[1] except ''

    现在只能写成:
    url_no_scheme = url.split('://', 1)[1] if '://' in url else ''

    常用的还有re.match、re.search,不确定能不能匹配的话,一行流都得写两遍,或者赋值到变量再if 判断,麻烦。
    23 replies    2015-07-06 14:06:10 +08:00
    cc7756789
        1
    cc7756789  
       Jul 1, 2015
    url_no_scheme = url.split('://', 1)[1] if url.split('://', 1)[1] else ''
    这样也行啊!
    czheo
        2
    czheo  
       Jul 1, 2015
    知道ruby的rescue的好了吧
    laoyuan
        3
    laoyuan  
    OP
       Jul 1, 2015   ❤️ 1
    @cc7756789 啊?会报错吧
    laoyuan
        4
    laoyuan  
    OP
       Jul 1, 2015
    @czheo 所以我在学Ruby 哈哈,我感觉Ruby 兼有PHP 的动态灵活性和 Python 比较完全的面对对象
    jackyspy
        6
    jackyspy  
       Jul 2, 2015   ❤️ 1
    这样异常真的好吗?
    (url.split('://', 1)+['',''])[1]
    (lambda x: x[1] if len(x)==3 else '')(url.split('://', 1))
    laoyuan
        7
    laoyuan  
    OP
       Jul 2, 2015
    @saber000 不好意思我只学了个基础还看不懂,等我深入学学之后再研究研究吧
    laoyuan
        8
    laoyuan  
    OP
       Jul 2, 2015
    @jackyspy 啊哈哈哈第一条太好了之前看过类似的例子,PHP处理$_GET,但在这里就怎么想都没想出来
    laoyuan
        9
    laoyuan  
    OP
       Jul 2, 2015
    @jackyspy 如果我想要的是 url.split('://', 1)[0] 呢,好像没办法了吧,脑洞开启ing
    laoyuan
        10
    laoyuan  
    OP
       Jul 2, 2015
    哈哈,我想出来了 ([''] + url.split('://', 1))[-2]
    laoyuan
        11
    laoyuan  
    OP
       Jul 2, 2015
    @jackyspy 有什么办法能让re.match、re.search 写成比较美观的一行流呢?
    url_no_scheme = re.search(r'://(.+)', url).group(1) if re.search(r'://(.+)', url) else ''
    fburst
        12
    fburst  
       Jul 2, 2015
    不喜欢一行的风格,难读。
    picasso250
        13
    picasso250  
       Jul 2, 2015
    @laoyuan 比较好奇,PHP哪里面向对象不完全了。。。你举个例子?
    laoyuan
        14
    laoyuan  
    OP
       Jul 2, 2015
    @picasso250 我就随口那么一说,你就随便那么一听好了~
    laoyuan
        15
    laoyuan  
    OP
       Jul 2, 2015
    我感觉Ruby 兼有PHP 的动态灵活性和 PHP、Python 比较完全的面对对象
    CodeDrift
        16
    CodeDrift  
       Jul 2, 2015
    我感觉这样写就失去python的特点了啊。。不太容易维护
    thinker3
        17
    thinker3  
       Jul 2, 2015
    不易读
    laoyuan
        18
    laoyuan  
    OP
       Jul 2, 2015
    @Anybfans 没关系啦,反正都是自己维护。。。
    laoyuan
        19
    laoyuan  
    OP
       Jul 2, 2015
    @thinker3 今天还学了个一行流,感觉挺好
    a = [each_num for each_num in [1, 6, 3, 7] if each_num > 5]
    WKPlus
        20
    WKPlus  
       Jul 6, 2015
    就你这个问题而言,url.split("://", 1)[-1] 就好了
    laoyuan
        21
    laoyuan  
    OP
       Jul 6, 2015
    @WKPlus 绝对不行,至于为什么我明天再告诉你
    laoyuan
        22
    laoyuan  
    OP
       Jul 6, 2015
    @WKPlus 不对,是我想错了。你说的是对了,我这就去改了
    kaneg
        23
    kaneg  
       Jul 6, 2015
    关键不是能不能写在一行,而是你不应该用抛异常的方式来控制业务逻辑
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3199 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 03:21 · PVG 11:21 · LAX 20:21 · JFK 23:21
    ♥ Do have faith in what you're doing.