Python错误和异常
时间:2022-10-08 03:30:00
错误和异常
1.概述
Python语法错误是程序中最常见的错误。这是因为开发人员不符合要求Python由语法代码引起的错误,包含语法错误的程序不能由解释器解释,程序必须修改才能正常运行。例如,在程序中缺少符号或0删除:
while True print("语法错误") ---------------------- a = 1/0
上述示例代码都有语法错误,无法分析,会报告SyntaxError的错误。Python中所有的异常均由类实现,所有的异常都继承自类BaseException。BaseException包括四个子类,其中子类Exception大多数常见的异常父类,如SyntaxError,ZeroDivisionError等都是其子类。
- Exception常见子类如下:
类名 | 描述 |
---|---|
SyntaxError | 语法错误 |
FileNotFoundError | 未找到指定文件或目录 |
NameError | 找不到指定名称的变量 |
ZeroDivisionReeor | 除数为0 |
IndexErorr | 使用超出列表范围的索引 |
KeyError | 使用字典中不存在的键 |
AttributeError | 尝试访问位置对象的属性 |
TypeError | 类型错误 |
2.捕获异常
Python程序运行中的异常会导致程序崩溃,因此开发人员需要友好地处理程序运行中的异常。Python中使用try—except语句捕获异常,它还可以与else、finally组合使用的异常处理。
2.1.try…except语句
语法格式如下:
try: 代码可能异常 except 异常类型: 语句处理错误
try…except句子的执行过程如下:
- 限制性try子句;
- 若try如果句子没有异常,则忽略except子句中的代码;
- 若try如果句子异常,则忽略try执行子句中剩余的代码except子句的代码。
# try...except语句 try: a = 5 / 0 except: print("0不能作为除数。")
2.2.捕获异常信息
try…except语句可以捕获和处理程序运行中的单个异常、多个异常或所有异常except在句子中使用关键词as获取系统反馈异常的具体信息:
- **捕获程序运行中的单个异常:**需要在except具体异常类别在句子中指定。
try: a = 5 / 0 except ZeroDivisionError as e: print(f"异常原因:{
e}") # 如果指定的异常与程序产生的异常不一致,程序运行仍将崩溃
- **捕获程序运行中的多种异常:**多个异常放到元组里进行处理。
try:
print(name)
list01 = ["python", "java", "C", "C++"]
print(list01[5])
except (NameError, IndexError) as e:
print(f"异常原因{
e}")
在上述代码中,只能输出第一个异常,因为程序解释器在遇到第一个异常后就去执行except语句里的内容,所以并不会输出IndexError的异常。也可以尝试拆分except子句变成以下结构:
try:
print(name)
list01 = ["python", "java", "C", "C++"]
print(list01[5])
except NameError as e:
print(f"异常原因{
e}")
except IndexError as e:
print(f"异常原因{
e}")
- **捕获所有异常:**捕获所有的异常可以有两种方式,捕获异常类的父类Exception;省略异常类。
try:
print(name)
list01 = ["python", "java", "C", "C++"]
print(list01[5])
# except Exception as e:
# print(f"异常原因{e}")
except:
print("程序出现异常,原因未知")
2.3.else子句
异常处理的主要目的时放置外部环境变化导致程序产生无法控制的错误,而不是处理程序的设计错误。因此将所有代码都用try子句包含起来的做法是不推荐的,try子句应尽量只包含可能产生异常的代码,当try子句出现错误时应执行else语句中的代码,格式为:
try:
可能出现错误的语句
except:
出错后执行的语句
else:
未出错执行的语句
如某程序员的分页显示功能可以根据用户输入控制每页显示多少条数据,但要求用户输入的数据为整数类型,如果输入数据符合要求则显示,如果不符合要求,则显示默认条数的数据:
# else子句
num = input("请输入分页显示的数据条数:")
try:
page_size = int(num)
except Exception as e:
page_size = 20
# 不符合输入要求,显示20页默认数据
print(f"当前页显示{
page_size}条数据")
else:
# 符合要求,显示输入数字的页数
print(f"当前页显示{
num}条数据")
以上程序当输入正常时会显示出入的数据,输入不符合要求时,会展示默认20条数据。
2.4.finally子句
finally子句和try…except语句连用时,无论try…except是否捕获到异常,finally子句后的代码都会被执行,语法格式为:
try:
可能出错的语句
except:
出错后执行的语句
finally:
一定会被执行的语句
Python在处理文件时,为避免打开的文件占用过多资源,在完成对文件的操作后需要使用close()方法关闭文件。为了确保文件一定会被关闭,可以将关闭操作放在finally子句中。
# finally子句
try:
file = open("异常.txt",'r')
file.write("人生苦短,快用python")
except Exception as e:
print("写入文件失败",e)
finally:
file.close()
print("文件已关闭")
3.抛出异常
Python程序中的异常不仅可以由系统抛出,还可以由开发人员使用关键字raise主动抛出。只要异常没有被处理就会被向上传递,直至最顶层已没有被处理,则会使用系统默认的方式处理(程序崩溃)。另外还可以使用assert语句检测一个表达式是否符合要求,不符合要求则抛出异常。
3.1.raise语句
raise语句用于引发特定的异常,使用方法大致可分为以下3种:
- 由异常类名引发异常;
- 由异常对象引发异常;
- 由程序中出现过的异常引发异常。
3.1.1.由类名引发异常
在raise语句后添加具体的异常类,使用类名引发异常,语法格式如下:
raise 异常类名
当raise语句指定了异常的类名时,Python解释器会自动创建该异常类的对象,进而引发异常。
raise NameError
运行结果:
3.1.2.使用对象引发异常
使用类名引发异常的语法格式如下:
raise 异常对象
name = NameError
raise name
运行结果:
3.1.3.由异常引发异常
仅使用关键字raise可重新引发刚才发生的异常,语法格式如下:
raise
例如:
try:
num
except NameError as e:
raise
运行结果如下:
3.2.异常的传递
如果程序中的异常没有被处理,默认情况下会将该异常传递给上一级,如果上一级仍然没有处理,会继续向上传递,直至异常被处理或程序崩溃。
以下案例通过计算一个正方形面积的示例演示异常的传递。程序中共包含3个函数:get_width()用于计算正方形的边长;calc_area()用于计算正方形面积;show_area()用于展示计算正方形的面积:
# 计算正方形面积演示异常的传递
# 计算边长
def get_width():
print("get_width()开始执行了。。。")
num = int(input("请输入除数:"))
# 发生异常
width_len = 10/num
print("get_width()执行结束。。。")
return width_len
# 计算正方形面积
def calc_area():
print("calc_area()开始执行。。。")
width_len = get_width()
print("calc_area()结束执行。。。")
return width_len * width_len
# 展示数据
def show_area():
try:
print("show_area()开始执行。。。")
area_val = calc_area()
print(f"正方形的面积是:{
area_val}")
print("show_area()结束执行。。。")
except ZeroDivisionError as e:
print(f"捕获异常{
e}")
if __name__ == '__main__':
show_area()
上述代码get_width()函数使用变量num接收用户接收的除数,通过 width_len = 10/num计算正方形的边长,如果输入的为0,程序会引发ZeroDivisionError异常。因为get_width()函数中并没有捕获异常的语句,所以get_width()函数的异常向上传递给calc_area()函数,而calc_area()函数中也没有捕获异常的处理,只能将一场信息继续向上传递给sow_area()。
执行结果:
3.3.assert断言语句
assert断言语句用于判断一个表达式是否为真,如果为True,不做任何操作,否则引发AssertError的异常。其语法格式如下:
assert 表达式[,参数]
表达式时assert语句的判定对象,参数通常是一个自定义的描述异常具体信息的字符串。
判断一个会员管理系统要求会员的年龄必须大于18岁,则可以对年龄进行断言:
age = 17
assert age >= 18, "年龄必须大于18岁"
以上代码表达式值为False,所以系统抛出了AssertError异常,并显示了异常信息:
assert断言语句多用于程序开发测试阶段,主要目的是确保代码的正确性。如果开发人员能确保程序正常执行,那么不建议使用assert语句抛出异常。
4.自定义异常
Python虽然涵盖了编程时绝大多数的异常,但仍然难以包含所有的异常,所以Python允许开发人员自定义异常,自定义异常子需要创建一个类,让它继承Exception或其他异常类即可。
如定义一个自定义异常类CustomError,让它继承Exception:
# 自定义CustomError异常类
class CustomError(Exception):
pass
定义好的自定义异常需要配合try…except语句或raise语句来使用:
try:
pass
raise CustomError("出现客户端异常")
except CustomError as e:
print(e)
上述代码在try语句中通过raise语句引发自定义异常类,同时还为异常指定提示信息。
自定义异常和普通类一样,也可以包含属性和方法,但一般情况下不添加或者只为其添加几个用于描述异常的详细信息的属性即可。
定义一个检测用户上传图片格式的异常位FileTypeError,在FileTypeError类的构造方法中调用父类的__init__()方法并将异常信息作为参数,代码如下:
class FileTypeError(Exception):
def __init__(self,err = "仅支持jpg/png/gif格式的图片"):
super().__init__(err)
flie_name = input("请上传图片:")
try:
if flie_name.split(".")[1] in ["jpg","png","gif"]:
print("上传成功")
else:
raise FileTypeError()
except FileTypeError as e:
print(e)
5.with语句与上下文管理器
使用finally子句虽然能处理关闭文件的操作,但这种方法过于繁琐,每次都需要编写调用close()方法的代码。因此,Python引入了with语句替代finally语句中调用close()方法释放资源。with语句仅支持创建资源,抛出异常,释放资源等操作,兵=并且可以简化代码。
5.1.with语句
with语句适用于对资源进行访问的场合,无论资源在使用过程中是否发生异常,都可以使用with语句保证执行释放的资源操作。其语法格式如下:
with 上下文表达式 [as 资源对象]:
语句体
以上语法的上下文表达式返回一个上下文管理器对象,如果指定了as子句,将上下文管理对象的__enter__()方法的返回值赋值给资源对象,资源对象可以是一个单个的变量,也可以是一个元组。
使用with语句操作文件对象的示例:
with open('a.txt') as file:
for aline in file:
print(aline)
上述示例可以打开a.txt文件,如果文件顺利打开则会将文件对象赋值给file对象,然后通过for循环进行遍历输出,当对文件遍历之后,with语句会关闭文件;如果文件不能顺利打开,with语句也会关闭a.txt文件。
注意:不是所有对象都可以使用with语句,只有支持上下文管理协议的对象才可以使用,目前支持该协议的对象如下:file,decimal.Context,thread.LockType,threading.BoundedSemaphore,threading.Condition,threading.Lock,threading.RLock,threading.Semaphore。
5.2.上下文管理器
with语句之所以能自动关闭资源,是因为它使用了一种名为上下文管理的技术管理资源。
1.上下文管理协议(Context Manager Protocol)
上下文管理协议包括__enter__()和__exit__()方法,支持该协议的对象均需要实现这两个方法。它们的用法如下:
- enter(self):进入上下文管理器调用此方法,它的返回值被放入with…as…语句的as说明符指定的变量中。
- exit(self,type,value,traceback):离开上下文管理器时调用此方法。在该方法中的参数type,value,traceback分别表示异常的类型、异常值、异常回溯追踪。如果__exit__()方法内部引发异常,该异常会覆盖掉其执行体中引发的异常。处理异常时不需要抛出异常,只需要返回False。
2.上下文管理器(Context Manager)
支持上下文管理协议的对象就是上下文管理器,这种对象实现了__enter__()和__exit__()方法,通过with语句即可调用上下文管理器,它负责建立运行时的上下文。
3.上下文表达式(Context Expression)
with语句中的关键字with之后的表达式返回一个支持上下文协议的对象,也就是返回一个上下文管理器。
4.运行时上下文
由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。enter()方法在与具体之前执行,exit()方法在与具体执行之后执行。
5.3.自定义上下文管理器
在开发中可以根据实际情况设计自定义上写问管理器。只需要让自定义的类支持上下文管理协议,并实现__enter__()和__exit__()方法即可。
# 自定义上下文管理器
class File(object):
"""自定义实现上下文管理器"""
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
self.f = open(self.filename, self.mode)
return self.f
def __exit__(self, exc_type, exc_val, exc_tb):
self.f.close()
with File("a.txt", "wb") as f:
f.write("哈哈哈,hahah".encode("utf8"))
print("写入成功")
6.练习
实现身份归属地查询添加异常:
import json
try:
f = open("身份证码值对照表.txt", 'r', encoding='utf-8')
content = f.read()
content_dict = json.loads(content) # 转换为字典类型
address = input('请输入身份证前6位:')
for key, val in content_dict.items():
if key == address:
print(val)
f.close()
except FileNotFoundError:
print("文件不存在")
身份证码值对照表.txt:
{ "110000": "北京市", "110101": "东城区", "110102": "西城区", "110105": "朝阳区", "110106": "丰台区", "110107": "石景山区", "110108": "海淀区", "110109": "门头沟区", "110111": "房山区", "110112": "通州区", "110113": "顺义区", "110114": "昌平区", "110115": "大兴区", "110116": "怀柔区", "110117": "平谷区", "110118": "密云区", "110119": "延庆区", "120000": "天津市", "120101": "和平区", "120102": "河东区", "120103": "河西区", "120104": "南开区", "120105": "河北区", "120106": "红桥区", "120110": "东丽区", "120111": "西青区", "120112": "津南区", "120113": "北辰区", "120114": "武清区", "120115": "宝坻区", "120116": "滨海新区", "120117": "宁河区", "120118": "静海区", "120119": "蓟州区", "130000": "河北省", "130100": "石家庄市", "130102": "长安区", "130104": "桥西区", "130105": "新华区", "130107": "井陉矿区", "130108": "裕华区", "130109": "藁城区", "130110": "鹿泉区", "130111": "栾城区", "130121": "井陉县", "130123": "正定县", "130125": "行唐县", "130126": "灵寿县", "130127": "高邑县", "130128": "深泽县", "130129": "赞皇县", "130130": "无极县", "130131": "平山县", "130132": "元氏县", "130133": "赵县", "130181": "辛集市", "130183": "晋州市", "130184": "新乐市", "130200": "唐山市", "130202": "路南区", "130203": "路北区", "130204": "古冶区", "130205": "开平区", "130207": "丰南区", "130208": "丰润区", "130209": "曹妃甸区", "130223": "滦县", "130224": "滦南县", "130225": "乐亭县", "130227": "迁西县", "130229": "玉田县", "130281": "遵化市", "130283": "迁安市", "130300": "秦皇岛市", "130302": "海港区", "130303": "山海关区", "130304": "北戴河区", "130306": "抚宁区", "130321": "青龙满族自治县", "130322": "昌黎县", "130324": "卢龙县", "130400": "邯郸市", "130402": "邯山区", "130403": "丛台区", "130404": "复兴区", "130406": "峰峰矿区", "130407": "肥乡区", "130408": "永年区", "130423": "临漳县", "130424": "成安县", "130425": "大名县", "130426": "涉县", "130427": "磁县", "130430": "邱县", "130431": "鸡泽县", "130432": "广平县", "130433": "馆陶县", "130434": "魏县", "130435": "曲周县", "130481": "武安市", "130500": "邢台市", "130502": "桥东区", "130503": "桥西区", "130521": "邢台县", "130522": "临城县", "130523": "内丘县", "130524": "柏乡县", "130525": "隆尧县", "130526": "任县", "130527": "南和县", "130528": "宁晋县", "130529": "巨鹿县", "130530": "新河县", "130531": "广宗县", "130532": "平乡县", "130533": "威县", "130534": "清河县", "130535": "临西县", "130581": "南宫市", "130582": "沙河市", "130600": "保定市", "130602": "竞秀区", "130606": "莲池区", "130607": "满城区", "130608": "清苑区", "130609": "徐水区", "130623": "涞水县", "130624": "阜平县", "130626": "定兴县", "130627": "唐县", "130628": "高阳县", "130629": "容城县", "130630": "涞源县", "130631": "望都县", "130632": "安新县", "130633": "易县", "130634": "曲阳县", "130635": "蠡县", "130636": "顺平县", "130637": "博野县", "130638": "雄县", "130681": "涿州市", "130682": "定州市", "130683": "安国市", "130684": "高碑店市", "130700": "张家口市", "130702": "桥东区", "130703": "桥西区", "130705": "宣化区", "130706": "下花园区", "130708": "万全区", "130709": "崇礼区", "130722": "张北县", "130723": "康保县", "130724": "沽源县", "130725": "尚义县", "130726": "蔚县", "130727": "阳原县", "130728": "怀安县", "130730": "怀来县", "130731": "涿鹿县", "130732": "赤城县", "130800": "承德市", "130802": "双桥区", "130803": "双滦区", "130804": "鹰手营子矿区", "130821": "承德县", "130822": "兴隆县", "130824": "滦平县", "130825": "隆化县", "130826": "丰宁满族自治县", "130827": "宽城满族自治县", "130828": "围场满族蒙古族自治县", "130881": "平泉市", "130900": "沧州市", "130902": "新华区", "130903": "运河区", "130921": "沧县", "130922": "青县", "130923": "东光县", "130924": "海兴县", "130925": "盐山县", "130926": "肃宁县", "130927": "南皮县", "130928": "吴桥县", "130929": "献县", "130930": "孟村回族自治县", "130981": "泊头市", "130982": "任丘市", "130983": "黄骅市", "130984": "河间市", "131000": "廊坊市", "131002": "安次区", "131003": "广阳区", "131022": "固安县", "131023": "永清县", "131024": "香河县", "131025": "大城县", "131026": "文安县", "131028": "大厂回族自治县", "131081": "霸州市", "131082": "三河市", "131100": "衡水市", "131102": "桃城区", "131103": "冀州区", "131121": "枣强县", "131122": "武邑县", "131123": "武强县", "131124": "饶阳县", "131125": "安平县", "131126": "故城县", "131127": "景县", "131128": "阜城县", "131182": "深州市", "140000": "山西省", "140100": "太原市", "140105": "小店区", "140106": "迎泽区", "140107": "杏花岭区", "140108": "尖草坪区", "140109": "万柏林区", "140110": "晋源区", "140121": "清徐县", "140122": "阳曲县", "140123": "娄烦县", "140181": "古交市", "140200": "大同市", "140202": "城区", "140203": "矿区", "140211": "南郊区", "140212": "新荣区", "140221": "阳高县", "140222": "天镇县", "140223": "广灵县", "140224": "灵丘县", "140225": "浑源县", "140226": "左云县", "140227": "大同县", "140300": "阳泉市", "140302": "城区", "140303": "矿区", "140311": "郊区", "140321": "平定县", "140322": "盂县", "140400": "长治市", "140402": "城区", "140411": "郊区", "140421": "长治县", "140423": "襄垣县", "140424": "屯留县", "140425": "平顺县", "140426": "黎城县", "140427": "壶关县", "140428": "长子县", "140429": "武乡县", "140430": "沁县", "140431": "沁源县", "140481": "潞城市", "140500": "晋城市", "140502": "城区", "140521": "沁水县", "140522": "阳城县", "140524": "陵川县", "140525": "泽州县", "140581": "高平市", "140600": "朔州市", "140602": "朔城区", "140603": "平鲁区", "140621": "山阴县", "140622": "应县", "140623": "右玉县", "140624": "怀仁县", "140700": "晋中市", "140702": "榆次区", "140721": "榆社县", "140722": "左权县", "140723": "和顺县", "140724": "昔阳县", "140725": "寿阳县", "140726": "太谷县", "140727": "祁县", "140728": "平遥县", "140729": "灵石县", "140781": "介休市", "140800": "运城市", "140802": "盐湖区", "140821": "临猗县", "140822": "万荣县", "140823": "闻喜县", "140824": "稷山县", "140825": "新绛县", "140826": "绛县", "140827": "垣曲县", "140828": "夏县", "140829": "平陆县", "140830": "芮城县", "140881": "永济市", "140882": "河津市", "140900": "忻州市", "140902": "忻府区", "140921": "定襄县", "140922": "五台县", "140923": "代县", "140924": "繁峙县", "140925": "宁武县", "140926": "静乐县", "140927": "神池县", "140928": "五寨县", "140929": "岢岚县", "140930": "河曲县", "140931": "保德县", "140932": "偏关县", "140981": "原平市", "141000": "临汾市", "141002": "尧都区", "141021": "曲沃县", "141022": "翼城县", "141023": "襄汾县", "141024": "洪洞县", "141025": "古县", "141026": "安泽县", "141027": "浮山县", "141028": "吉县", "141029": "乡宁县", "141030": "大宁县", "141031": "隰县", "141032": "永和县", "141033": "蒲县", "141034": "汾西县", "141081": "侯马市", "141082": "霍州市", "141100": "吕梁市", "141102": "离石区", "141121": "文水县", "141122": "交城县", "141123": "兴县", "141124": "临县", "141125": "柳林县", "141126": "石楼县", "141127": "岚县", "141128": "方山县", "141129": "中阳县", "141130": "交口县", "141181": "孝义市", "141182": "汾阳市", "150000": "内蒙古自治区", "150100": "呼和浩特市", "150102": "新城区", "150103": "回民区", "150104": "玉泉区", "150105": "赛罕区", "150121": "土默特左旗", "150122": "托克托县", "150123": "和林格尔县", "150124": "清水河县", "150125": "武川县", "150200": "包头市", "150202": "东河区", "150203": "昆都仑区", "150204": "青山区", "150205": "石拐区", "150206": "白云鄂博矿区", "150207": "九原区", "150221": "土默特右旗", "150222": "固阳县", "150223": "达尔罕茂明安联合旗", "150300": "乌海市", "150302": "海勃湾区", "150303": "海南区", "150304": "乌达区", "150400": "赤峰市", "150402": "红山区", "150403": "元宝山区", "150404": "松山区", "150421": "阿鲁科尔沁旗", "150422": "巴林左旗", "150423": "巴林右旗", "150424": "林西县", "150425": "克什克腾旗", "150426": "翁牛特旗", "150428": "喀喇沁旗", "150429": "宁城县", "150430": "敖汉旗", "150500": "通辽市", "150502": "科尔沁区", "150521": "科尔沁左翼中旗", "150522": "科尔沁左翼后旗", "150523": "开鲁县", "150524": "库伦旗", "150525": "奈曼旗", "150526": "扎鲁特旗", "150581": "霍林郭勒市", "150600": "鄂尔多斯市", "150602": "东胜区", "150603": "康巴什区", "150621": "达拉特旗", "150622": "准格尔旗", "150623": "鄂托克前旗", "150624": "鄂托克旗", "150625": "杭锦旗", "150626": "乌审旗", "150627": "伊金霍洛旗", "150700": "呼伦贝尔市", "150702": "海拉尔区", "150703": "扎赉诺尔区", "150721": "阿荣旗", "150722": "莫力达瓦达斡尔族自治旗", "150723": "鄂伦春自治旗", "150724": "鄂温克族自治旗", "150725": "陈巴尔虎旗", "150726": "新巴尔虎左旗", "150727": "新巴尔虎右旗", "150781": "满洲里市", "150782": "牙克石市", "150783": "扎兰屯市", "150784": "额尔古纳市", "150785": "根河市", "150800": "巴彦淖尔市", "150802": "临河区", "150821": "五原县", "150822": "磴口县", "150823": "乌拉特前旗", "150824": "乌拉特中旗", "150825": "乌拉特后旗", "150826": "杭锦后旗", "150900": "乌兰察布市", "150902": "集宁区", "150921": "卓资县", "150922": "化德县", "150923": "商都县", "150924": "兴和县", "150925": "凉城县", "150926": "察哈尔右翼前旗", "150927": "察哈尔右翼中旗", "150928": "察哈尔右翼后旗", "150929": "四子王旗", "150981": "丰镇市", "152200": "兴安盟", "152201": "乌兰浩特市", "152202": "阿尔山市", "152221": "科尔沁右翼前旗", "152222": "科尔沁右翼中旗", "152223": "扎赉特旗", "152224": "突泉县", "152500": "锡林郭勒盟", "152501": "二连浩特市", "152502": "锡林浩特市", "152522": "阿巴嘎旗", "152523": "苏尼特左旗", "152524": "苏尼特右旗", "152525": "东乌珠穆沁旗", "152526": "西乌珠穆沁旗", "152527": "太仆寺旗", "152528": "镶黄旗", "152529": "正镶白旗", "152530": "正蓝旗", "152531": "多伦县", "152900": "阿拉善盟", "152921": "阿拉善左旗", "152922": "阿拉善右旗", "152923": "额济纳旗", "210000": "辽宁省", "210100": "沈阳市", "210102": "和平区", "210103": "沈河区", "210104": "大东区", "210105": "皇姑区", "210106": "铁西区", "210111": "苏家屯区", "210112": "浑南区", "210113": "沈北新区", "210114": "于洪区", "210115": "辽中区", "210123": "康平县", "210124": "法库县", "210181": "新民市", "210200": "大连市", "210202": "中山区", "210203": "西岗区", "210204": "沙河口区", "210211": "甘井子区", "210212": "旅顺口区", "210213": "金州区", "210214": "普兰店区", "210224": "长海县", "210281": "瓦房店市", "210283": "庄河市", "210300": "鞍山市", "210302": "铁东区", "210303": "铁西区", "210304": "立山区", "210311": "千山区", "210321": "台安县", "210323": "岫岩满族自治县", "210381": "海城市", "210400": "抚顺市", "210402": "新抚区", "210403": "东洲区", "210404": "望花区", "210411": "顺城区", "210421": "抚顺县", "210422": "新宾满族自治县", "210423": "清原满族自治县", "210500": "本溪市", "210502": "平山区", "210503": "溪湖区", "210504": "明山区", "210505": "南芬区", "210521": "本溪满族自治县", "210522": "桓仁满族自治县", "210600": "丹东市", "210602": "元宝区", "210603": "振兴区", "210604": "振安区", "210624": "宽甸满族自治县", "210681": "东港市", "210682": "凤城市", "210700": "锦州市", "210702": "古塔区", "210703": "凌河区", "210711": "太和区", "210726": "黑山县", "210727": "义县", "210781": "凌海市", "210782": "北镇市", "210800": "营口市", "210802": "站前区", "210803": "西市区", "210804": "鲅鱼圈区", "210811": "老边区", "210881": "盖州市", "210882": "大石桥市", "210900": "阜新市", "210902": "海州区", "210903": "新邱区", "210904": "太平区", "210905": "清河门区", "210911": "细河区", "210921": "阜新蒙古族自治县", "210922": "彰武县", "211000": "辽阳市", "211002": "白塔区", "211003": "文圣区", "211004": "宏伟区", "211005": "弓长岭区", "211011": "太子河区", "211021": "辽阳县", "211081": "灯塔市", "211100": "盘锦市", "211102": "双台子区", "211103": "兴隆台区", "211104": "大洼区", "211122": "盘山县", "211200": "铁岭市", "211202": "银州区", "211204": "清河区", "211221": "铁岭县", "211223": "西丰县", "211224": "昌图县", "211281": "调兵山市", "211282": "开原市", "211300": "朝阳市", "211302": "双塔区", "211303": "龙城区", "211321": "朝阳县", "211322": "建平县", "211324": "喀喇沁左翼蒙古族自治县", "211381": "北票市", "211382": "凌源市", "211400": "葫芦岛市", "211402": "连山区", "211403": "龙港区", "211404": "南票区", "211421": "绥中县", "211422": "建昌县", "211481": "兴城市", "220000": "吉林省", "220100": "长春市", "220102": "南关区", "220103": "宽城区", "220104": "朝阳区", "220105": "二道区", "220106": "绿园区", "220112": "双阳区", "220113": "九台区", "220122": "农安县", "220182": "榆树市", "220183": "德惠市", "220200": "吉林市", "220202": "昌邑区", "220203": "龙潭区", "220204": "船营区", "220211": "丰满区", "220221": "永吉县", "220281": "蛟河市", "220282": "桦甸市", "220283": "舒兰市", "220284": "磐石市", "220300": "四平市", "220302": "铁西区", "220303": "铁东区", "220322": "梨树县", "220323": "伊通满族自治县", "220381": "公主岭市", "220382": "双辽市", "220400": "辽源市", "220402": "龙山区", "220403": "西安区", "220421": "东丰县", "220422": "东辽县", "220500": "通化市", "220502": "东昌区", "220503": "二道江区", "220521": "通化县", "220523": "辉南县", "220524": "柳河县", "220581": "梅河口市", "220582": "集安市", "220600": "白山市", "220602": "浑江区", "220605": "江源区", "220621": "抚松县", "220622": "靖宇县", "220623": "长白朝鲜族自治县", "220681": "临江市", "220700": "松原市", "220702": "宁江区", "220721": "前郭尔罗斯蒙古族自治县", "220722": "长岭县", "220723": "乾安县", "220781": "扶余市", "220800": "白城市", "220802": "洮北区", "220821": "镇赉县", "220822": "通榆县", "220881": "洮南市", "220882": "大安市", "222400": "延边朝鲜族自治州", "222401": "延吉市", "222402": "图们市", "222403": "敦化市", "222404": "珲春市", "222405": "龙井市", "222406": "和龙市", "222424": "汪清县", "222426": "安图县", "230000": "黑龙江省", "230100": "哈尔滨市", "230102": "道里区", "230103": "南岗区", "230104": "道外区", "230108": "平房区", "230109": "松北区", "230110": "香坊区", "230111": "呼兰区", "230112": "阿城区", "230113": "双城区", "230123": "依兰县", "230124": "方正县", "230125": "宾县", "230126": "巴彦县", "230127": "木兰县", "230128": "通河县", "230129": "延寿县", "230183": "尚志市", "230184": "五常市", "230200": "齐齐哈尔市", "230202": "龙沙区", "230203": "建华区", "230204": "铁锋区", "230205": "昂昂溪区", "230206": "富拉尔基区", "230207": "碾子山区", "230208": "梅里斯达斡尔族区", "230221": "龙江县", "230223": "依安县", "230224": "泰来县", "230225": "甘南县", "230227": "富裕县", "230229": "克山县", "230230": "克东县", "230231": "拜泉县", "230281": "讷河市", "230300": "鸡西市", "230302": "鸡冠区", "230303": "恒山区", "230304": "滴道区", "230305": "梨树区", "230306": "城子河区", "230307": "麻山区", "230321": "鸡东县", "230381": "虎林市", "230382": "密山市", "230400": "鹤岗市", "230402": "向阳区", "230403": "工农区", "230404": "南山区", "230405": "兴安区", "230406": "东山区", "230407": "兴山区", "230421": "萝北县", "230422": "绥滨县", "230500": "双鸭山市", "230502": "尖山区", "230503": "岭东区", "230505": "四方台区", "230506": "宝山区", "230521": "集贤县", "230522": "友谊县", "230523": "宝清县", "230524": "饶河县", "230600": "大庆市", "230602": "萨尔图区", "230603": "龙凤区", "230604": "让胡路区", "230605": "红岗区", "230606": "大同区", "230621": "肇州县", "230622": "肇源县", "230623": "林甸县", "230624": "杜尔伯特蒙古族自治县", "230700": "伊春市", "230702": "伊春区", "230703": "南岔区", "230704": "友好区", "230705": "西林区", "230706": "翠峦区", "230707": "新青区", "230708": "美溪区", "230709": "金山屯区", "230710": "五营区", "230711": "乌马河区", "230712": "汤旺河区", "230713": "带岭区", "230714": "乌伊岭区", "230715": "红星区", "230716": "上甘岭区", "230722": "嘉荫县", "230781": "铁力市", "230800": "佳木斯市", "230803": "向阳区", "230804": "前进区", "230805": "
东风区", "230811": "郊区", "230822": "桦南县", "230826": "桦川县", "230828": "汤原县", "230881": "同江市", "230882": "富锦市", "230883": "抚远市", "230900": "七台河市", "230902": "新兴区", "230903": "桃山区", "230904": "茄子河区", "230921": "勃利县", "231000": "牡丹江市", "231002": "东安区", "231003": "阳明区", "231004": "爱民区", "231005": "西安区", "231025": "林口县", "231081": "绥芬河市", "231083": "海林市", "231084": "宁安市", "231085": "穆棱市", "231086": "东宁市", "231100": "黑河市", "231102": "爱辉区", "231121": "嫩江县", "231123": "逊克县", "231124": "孙吴县", "231181": "北安市", "231182": "五大连池市", "231200": "绥化市", "231202": "北林区", "231221": "望奎县", "231222": "兰西县", "231223": "青冈县", "231224": "庆安县", "231225": "明水县", "231226": "绥棱县", "231281": "安达市", "231282": "肇东市", "231283": "海伦市", "232700": "大兴安岭地区", "232721": "呼玛县", "232722": "塔河县", "232723": "漠河县", "310000": "上海市", "310101": "黄浦区", "310104": "徐汇区", "310105": "长宁区", "310106": "静安区", "310107": "普陀区", "310109": "虹口区", "310110": "杨浦区", "310112": "闵行区", "310113": "宝山区", "310114": "嘉定区", "310115": "浦东新区", "310116": "金山区", "310117": "松江区", "310118": "青浦区", "310120": "奉贤区", "310151": "崇明区", "320000": "江苏省", "320100": "南京市", "320102": "玄武区", "320104": "秦淮区", "320105": "建邺区", "320106": "鼓楼区", "320111": "浦口区", "320113": "栖霞区", "320114": "雨花台区", "320115": "江宁区", "320116": "六合区", "320117": "溧水区", "320118": "高淳区", "320200": "无锡市", "320205": "锡山区", "320206": "惠山区", "320211": "滨湖区", "320213": "梁溪区", "320214": "新吴区", "320281": "江阴市", "320282": "宜兴市", "320300": "徐州市", "320302": "鼓楼区", "320303": "云龙区", "320305": "贾汪区", "320311": "泉山区", "320312": "铜山区", "320321": "丰县", "320322": "沛县", "320324": "睢宁县", "320381": "新沂市", "320382": "邳州市", "320400": "常州市", "320402": "天宁区", "320404": "钟楼区", "320411": "新北区", "320412": "武进区", "320413": "金坛区", "320481": "溧阳市", "320500": "苏州市", "320505": "虎丘区", "320506": "吴中区", "320507": "相城区", "320508": "姑苏区", "320509": "吴江区", "320581": "常熟市", "320582": "张家港市", "320583": "昆山市", "320585": "太仓市", "320600": "南通市", "320602": "崇川区", "320611": "港闸区", "320612": "通州区", "320621": "海安县", "320623": "如东县", "320681": "启东市", "320682": "如皋市", "320684": "海门市", "320700": "连云港市", "320703": "连云区", "320706": "海州区", "320707": "赣榆区", "320722": "东海县", "320723": "灌云县", "320724": "灌南县", "320800