如何根据Python版本抛对应版本的异常?

je5s_ 2018-07-27 04:06:46
现在需要做一个Python2和Python3的兼容
问题是在执行json.loads()的时候,Python2会抛ValueError,Python3会抛JsonDecodeError
需求是根据不同的版本抛对应版本的异常,请问该怎么写?

import sys

python_version = sys.version_info.major

try:
json.loads("xxx")

except ...
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
冯斯特罗 2018-07-30
  • 打赏
  • 举报
回复
一切 --> 一些
冯斯特罗 2018-07-30
  • 打赏
  • 举报
回复
不好意思不清楚.不过我在一切框架或者库里面见过类似这样的代码

try:
import xxx
except xxx as e:
import xxx_in_py3

仅供参考.

引用 2 楼 harvestnight 的回复:
我的意思是同一套代码,跑py2就抛ValueError ,跑py3就抛JSONDecodeError
你的这个跑py2会报错的,
执行到
except json.JSONDecodeError as e:
这一句的时候。
因为py2根本没有JSONDecodeError 这个异常。

但是受你这个json.JSONDecodeError的启发

import json
import sys

py_version = sys.version_info.major

if py_version == 2:
try:
json.loads("xxx")
except ValueError as e:
print(456)

else:
try:
json.loads("xxx")
except json.JSONDecodeError as e:
print(123)

这样是没问题了。
之前一直写java的,完全没了解python这种用法啊........
那现在问题变成了,有简洁的写法吗....

[quote=引用 1 楼 chaleaoch_gmail 的回复:]
是这个意思吗?
import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")

except Exception as e:
print (123)


或者这样?

import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")
except json.JSONDecodeError as e:
print(123)
except ValueError as e:
print(456)

[/quote]
je5s_ 2018-07-27
  • 打赏
  • 举报
回复
我的意思是同一套代码,跑py2就抛ValueError ,跑py3就抛JSONDecodeError
你的这个跑py2会报错的,
执行到
except json.JSONDecodeError as e:
这一句的时候。
因为py2根本没有JSONDecodeError 这个异常。

但是受你这个json.JSONDecodeError的启发

import json
import sys

py_version = sys.version_info.major

if py_version == 2:
try:
json.loads("xxx")
except ValueError as e:
print(456)

else:
try:
json.loads("xxx")
except json.JSONDecodeError as e:
print(123)

这样是没问题了。
之前一直写java的,完全没了解python这种用法啊........
那现在问题变成了,有简洁的写法吗....

引用 1 楼 chaleaoch_gmail 的回复:
是这个意思吗?
import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")

except Exception as e:
print (123)


或者这样?

import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")
except json.JSONDecodeError as e:
print(123)
except ValueError as e:
print(456)

冯斯特罗 2018-07-27
  • 打赏
  • 举报
回复
是这个意思吗?
import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")

except Exception as e:
print (123)


或者这样?

import sys
import json

python_version = sys.version_info.major

try:
json.loads("xxx")
except json.JSONDecodeError as e:
print(123)
except ValueError as e:
print(456)


37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧